iOS Quartz: 关于CALayer的contentsCenter属性_移动开发_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > 移动开发 > iOS Quartz: 关于CALayer的contentsCenter属性

iOS Quartz: 关于CALayer的contentsCenter属性

 2013/11/4 3:36:04  _Mgen  博客园  我要评论(0)
  • 摘要:首先注意加入QuartzCoreFramework,然后import必要的Header:QuartzCore/QuartzCore.h.我们先来使用CALayer显示一个完整的图片,如下代码://创建CGImageRef(test.png是工程Bundle中的资源图片文件)CGImageRefimg=[UIImageimageNamed:@"test.png"].CGImage;//创建CALayerCALayer*layer=[CALayerlayer]
  • 标签:iOS Quartz Ten

首先注意加入Quartz Core Framework,然后import必要的Header:QuartzCore/QuartzCore.h.

我们先来使用CALayer显示一个完整的图片,如下代码:

//创建CGImageRef(test.png是工程Bundle中的资源图片文件)

CGImageRef img = [UIImage imageNamed:@"test.png"].CGImage;

//创建CALayer

CALayer *layer = [CALayer layer];

//设置CALayer的内容

layer.contents = (__bridge id)img;

layer.frame = CGRectMake(20, 20, CGImageGetWidth(img), CGImageGetHeight(img));

//添加LayerView

[self.view.layer addSublayer:layer];

 

图片会显示:

屏幕快照_2013-11-03_下午10.29.18

 

接下来加入一些代码,让整个Layer只显示右上角四分之一的内容,而Layer的大小保持不变,所以显示的内容会被拉伸,如下代码:

//选择右上角的四分之一为内容

layer.contentsRect = CGRectMake(0.5, 0, 0.5, 0.5);

//拉伸

layer.contentsGravity = kCAGravityResize;

注意CALayer的contentsRect属性的单位是比例(而不是绝对坐标)。

运行后如下图:

屏幕快照_2013-11-03_下午10.29.41

 

下面就可以讲CALayer的contentsCenter属性了,因为contentsCenter属性只有在图片被拉伸后才会起作用,contentsCenter可以用来定义全面拉伸的范围。什么是“全面拉伸”?

看下图:

image

如果contentsCenter属性是上图中间的蓝色方框,那么当这个图片被拉伸后,contentsCenter属性定义的区域会被全面拉伸(也就是从四个方向进行放大或者缩小),而被这个方框分割后的其他方格会按照上图所表示的进行横向或者纵向的拉伸,或者某些方框根本不拉伸!这就是contentsCenter属性的意义

contentsCenter属性和contentsRect属性一样,同样是以比例作单位。两个属性可以叠加,如果contentsRect属性被设置,contentsCenter属性就会操作contentsRect属性所定义的范围。

 

那么,接着上面的代码,我们想把上图中的左下角的四分之一部分进行全面拉伸,那么加入设置contentsCenter属性的代码:

//左下角的四分之一拉伸

layer.contentsCenter = CGRectMake(0, 0.5, 0.5, 0.5);

运行结果:

屏幕快照_2013-11-03_下午10.30.04

OK,可以看到,左下角的四分之一部分进行了全面拉伸,而上面和右侧的方块只是进行了横向和纵向的拉伸,而右上角的方框则没有发生变化。

发表评论
用户名: 匿名