美文网首页
Core Animation:使用CALayer的content

Core Animation:使用CALayer的content

作者: 黄龙辉 | 来源:发表于2016-02-22 16:08 被阅读3659次
    1. contents是一个类型为id的属性,在iOS开发中,可以利用这个属性给CALayer设置backing image。需要用CGImageRef类型的值给contents赋值,不然没有效果。赋值后,CALayer会显示一张图片
      UIImage *image = [UIImage imageNamed:@"dog.JPEG"];
      view.layer.contents = (__bridge id)image.CGImage;

    2. 使用UIImageView和CALayer显示图片的时候,当frame的size和图片的size长宽比不一致的时候,就会出现图片被拉伸的情况。如下图所示

      (图一)被横向拉伸的狗.JPEG
      UIView有一个命名为contentMode的属性,可以设置图片的显示方式。对应于contentModeCALayer的属性为contentsGravity。但contentMode是一个枚举类型,而contentsGravity接受的是一个字符串类型,可选的常量值为kCAGravityResizeAspect等。给contentMode赋值UIViewContentModeScaleAspectFit或者给contentsGravity赋值kCAGravityResizeAspect,就可以避免图片出现拉伸的情况。如下图
      (图二)显示正常的狗.JPEG
    3. contentsScale属性是支持高分辨率屏幕机制的一部分。它的默认值为1.0,即会以每个点一个像素绘制图片。如果设置成2.0,则会以每个点2个像素绘制图片。但需要注意的是,如果设置了contentMode或者contentsGravity为一些值时(例如kCAGravityResizeAspect或者UIViewContentModeScaleAspectFit),对于contentsScale的设置会没有效果。

    4. 当CALayer显示的内容超过了图层本身的frame时,可以通过设置maskToBoundsYES,这样超过图层本身frame的内容就不会显示。

    5. UIImage是一个屏幕分辨率解决方案,所以指定点来度量大小。但是一些底层的图片表示如CGImage就会使用像素,所以要清楚在Retina设备和普通设备上,他们表现出来了不同的大小。
      UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(100, 20, 200, 200)];
      imageView.backgroundColor = [UIColor greenColor];
      imageView.contentMode = UIViewContentModeCenter;
      UIImage *image = [UIImage imageNamed:@"demo_avatar_jobs"];
      imageView.image = image;
      [self.view addSubview: imageView];
      上面这段代码显示的效果如下图三所示

      (图三)jobs.JPEG
      UIImageView * imageView = [[UIImageView alloc] initWithFrame:CGRectMake(50, 20, 200, 200)];
      imageView.backgroundColor = [UIColor greenColor];
      imageView.contentMode = UIViewContentModeCenter;
      UIImage *image = [UIImage imageNamed:@"demo_avatar_jobs"];
      imageView.layer.contents = (__bridge_transfer id)image.CGImage;
      [self.view addSubview: imageView];
      而这段代码显示的效果如下图四所示
      (图四)jobs.JPEG

    相关文章

      网友评论

          本文标题:Core Animation:使用CALayer的content

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