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长宽比不一致的时候,就会出现图片被拉伸的情况。如下图所示
UIView
有一个命名为contentMode
的属性,可以设置图片的显示方式。对应于contentMode
,CALayer
的属性为contentsGravity
。但contentMode
是一个枚举类型,而contentsGravity
接受的是一个字符串类型,可选的常量值为kCAGravityResizeAspect
等。给contentMode
赋值UIViewContentModeScaleAspectFit
或者给contentsGravity
赋值kCAGravityResizeAspect
,就可以避免图片出现拉伸的情况。如下图
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];
上面这段代码显示的效果如下图三所示
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];
而这段代码显示的效果如下图四所示
Core Animation:使用CALayer的contents(一)
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 本文转载自:http://www.cocoachina.com/ios/20150106/10840.html 为...
- 本文转载自:http://www.cocoachina.com/ios/20150104/10814.html ...
- 许多UIView的子类,如一个UIButton或一个UILabel,它们知道怎么绘制自己。迟早,你也将想要做一些自...