美文网首页
CALayer----寄宿图

CALayer----寄宿图

作者: M_PI_4 | 来源:发表于2018-04-30 00:05 被阅读0次

寄宿图

  • 什么是寄宿图

图层中包含的 View

1. contents 属性

contents

1> CALayer 的属性之一
2> 该属性的类型 id
3> 可赋给该属性CGImage,用以展示图片


类型转化问题

形如:

layer.contents = (__bridge id)image.CGImage;

  • UIImage: 存在CGImage属性(Cocoa下对象),返回“CGImageRef”,返回的是CoreFundation下的类型,因此需要类型转化一下
  • __bridge: 只有非ARC下才不需要转化

  • 代码示例:
#import "ViewController.h"

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIView *layerView;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    UIImage *image = [UIImage imageNamed:@"li"];
    self.layerView.layer.contents = (__bridge id)image.CGImage;
    self.layerView.layer.cornerRadius = 5.0f;
    self.layerView.layer.borderWidth = 2.0f;
    self.layerView.layer.borderColor = [UIColor grayColor].CGColor;
    self.layerView.layer.masksToBounds = YES;
}  
  • 效果示意:


    contents图

contentGravity

从上面的效果来看,图片是有一些变形的,right??

  • UIView 层初级改良:
//Scale:拉伸图片
//    Aspect:图片长宽的比例,保持图形的长宽比,保持图片不变形。
//    Aspect Fill:在保持长宽比的前提下,缩放图片,使图片充满容器。
//    Aspect Fit:在保持长宽比的前提下,缩放图片,使得图片在容器内完整显示出来。
//    Scale to Fill: 缩放图片,使图片充满容器。图片未必保持长宽比例协调,有可能会拉伸至变形
    self.layerView.contentMode = UIViewContentModeScaleAspectFit;  
初级改良
  • 图层 层面改进
    /* A string defining how the contents of the layer is mapped into its
    * bounds rect. Options are `center', `top', `bottom', `left',
    * `right', `topLeft', `topRight', `bottomLeft', `bottomRight',
    * `resize', `resizeAspect', `resizeAspectFill'. The default value is
    * `resize'. Note that "bottom" always means "Minimum Y" and "top"
    * always means "Maximum Y".*/

//  属于CALayer的内容模式
 self.layerView.layer.contentsGravity = kCAGravityResizeAspect;

contentsScale

  1. 去除像素化
  2. 定义寄宿图的像素尺寸和视图大小的比例
layer.contentsScale = [UIScreen mainScreen].scale;  

maskToBounds

等同于UIView的clipsToBounds的属性,去除超出边界的内容


Custom Drawing

除了给图层设置contents的寄宿图,也可以直接用CoreGraphics直接绘制(继承UI View并实现-drawRect:方法)

  • -drawRect:方法的实现

UIView检测到-drawRect:方法被调用,UIView 会给视图分配一个寄宿图,并且这个寄宿图的像素尺寸等于视图大小与contentsScale的乘积之值。
基于上条原因,如非必须切勿将一空-drawRect:方法置于UIView子类之下

  • -drawRect:方法的调用

视图出现在屏幕上的时候就会被自动调用
代码内容先调用CoreGraphics绘制寄宿图,之后缓存这些代码内容直到需要被更新(手动调-setNeedDisplay方法 )。

布局

  • position 和 anchorPoint

position: 图层在父图层的哪一个位置
anchorPoint:该图层的哪一个点在父图层指定的点上

相关文章

  • CALayer----寄宿图

    寄宿图 什么是寄宿图 图层中包含的 View 1. contents 属性 contents: 1> CALaye...

  • 寄宿图

    看到这个名字可能会一脸懵逼,什么是寄宿图啊?简单的来说就是图层中包含的图。 contents属性 CALayer有...

  • 寄宿图

    contents属性 定义类型为id,但ios上必须赋值 CGImage,否则图层显示为空 (Mac OS 上 可...

  • CALayer寄宿图

    寄宿图 CALayer 类能够包含一张图片,这个图片就是CALayer寄宿图,用属性contents进行赋值。 c...

  • CoreAnimation寄宿图

    contents: 在MacOS上他是CGImage或者NSImage都可以,但是在IOS必须是一个CGImage...

  • 2、寄宿图

    文章摘录自:https://github.com/AttackOnDobby/iOS-Core-Animation...

  • CALayer寄宿图

    什么是寄宿图? 简而言之就是图层(layer)中包含的图,这个图为了我们提供了能够去设置或者绘制出我们想要的图案显...

  • CALayer的寄宿图

    CALayer 有一个属性叫做contents,它可以直接在图层中放置一张图片 @property conte...

  • iOS动画—寄宿图

    寄宿图 图片胜过千言万语,界面抵得上千图片 ——Ben Shneiderman   我们在第一章『图层树』中介绍了...

  • 事件传递

    CALayer----事件传递 事件的产生和传递 触摸后,系统会传递触摸到UIApplication管理的事件队列...

网友评论

      本文标题:CALayer----寄宿图

      本文链接:https://www.haomeiwen.com/subject/cppglftx.html