contents
是一个类型为id的属性,在iOS开发中,可以利用这个属性给CALayer
设置backing image。需要用CGImageRef类型的值给contents
赋值,不然没有效果。赋值后,CALayer
会显示一张图片
UIImage *image = [UIImage imageNamed:@"dog.JPEG"];
view.layer.contents = (__bridge id)image.CGImage;-
使用UIImageView和CALayer显示图片的时候,当frame的size和图片的size长宽比不一致的时候,就会出现图片被拉伸的情况。如下图所示
(图一)被横向拉伸的狗.JPEG
UIView
有一个命名为contentMode
的属性,可以设置图片的显示方式。对应于contentMode
,CALayer
的属性为contentsGravity
。但contentMode
是一个枚举类型,而contentsGravity
接受的是一个字符串类型,可选的常量值为kCAGravityResizeAspect
等。给contentMode
赋值UIViewContentModeScaleAspectFit
或者给contentsGravity
赋值kCAGravityResizeAspect
,就可以避免图片出现拉伸的情况。如下图
(图二)显示正常的狗.JPEG contentsScale
属性是支持高分辨率屏幕机制的一部分。它的默认值为1.0,即会以每个点一个像素绘制图片。如果设置成2.0,则会以每个点2个像素绘制图片。但需要注意的是,如果设置了contentMode
或者contentsGravity
为一些值时(例如kCAGravityResizeAspect
或者UIViewContentModeScaleAspectFit
),对于contentsScale
的设置会没有效果。当CALayer显示的内容超过了图层本身的
frame
时,可以通过设置maskToBounds
为YES
,这样超过图层本身frame
的内容就不会显示。-
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的contents(一)
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 本文转载自:http://www.cocoachina.com/ios/20150106/10840.html 为...
- 本文转载自:http://www.cocoachina.com/ios/20150104/10814.html ...
- 许多UIView的子类,如一个UIButton或一个UILabel,它们知道怎么绘制自己。迟早,你也将想要做一些自...