码迷,mamicode.com
首页 > 移动开发 > 详细

iOS开发——图形编程OC篇&(三)CALayer隐式动画

时间:2015-06-04 22:21:22      阅读:664      评论:0      收藏:0      [点我收藏+]

标签:

CALayer隐式动画

在前面几讲中已经提到,每一个UIView内部都默认关联着一个CALayer,我们可用称这个Layer为Root Layer(根层)。所有的非Root Layer,也就是手动创建的CALayer对象,都存在着隐式动画。
* 当对非Root Layer的部分属性进行相应的修改时,默认会自动产生一些动画效果,这些属性称为Animatable Properties(可动画属性)。
* 列举几个常见的Animatable Properties:

  • ? bounds:用于设置CALayer的宽度和高度。修改这个属性会产生缩放动画
  • ? backgroundColor:用于设置CALayer的背景色。修改这个属性会产生背景色的渐变动画
  • ? position:用于设置CALayer的位置。修改这个属性会产生平移动画

比如:假设一开始CALayer的position为(100, 100),然后在某个时刻修改为(200, 200),那么整个CALayer就会在短时间内从(100, 100)这个位置平移到(200, 200)
* 我们也可以从官方文档中查询所有的Animatable Properties

 1 @interface MainViewController ()
 2 
 3 @property (weak, nonatomic) CALayer *myLayer;
 4 
 5 // 颜色数组
 6 @property (strong, nonatomic) NSArray *colorArray;
 7 // 图像数组
 8 @property (strong, nonatomic) NSArray *imageArray;
 9 
10 @end
11 
12 @implementation MainViewController
13 /**
14  触摸屏幕,开始动画
15  
16  */
17 
18 - (void)viewDidLoad
19 {
20     [super viewDidLoad];
21 
22     // 1. 实例化自定义图层
23     CALayer *myLayer = [CALayer layer];
24     [myLayer setBounds:CGRectMake(0, 0, 100, 100)];
25     [myLayer setBackgroundColor:[UIColor redColor].CGColor];
26     [myLayer setPosition:CGPointMake(50, 50)];
27     
28     [self.view.layer addSublayer:myLayer];
29     
30     self.myLayer = myLayer;
31     
32     // 2. 定义数据
33     self.colorArray = @[[UIColor redColor], [UIColor greenColor], [UIColor blueColor]];
34     
35     UIImage *image1 = [UIImage imageNamed:@"头像1.png"];
36     UIImage *image2 = [UIImage imageNamed:@"头像2.png"];
37     self.imageArray = @[image1, image2];
38 }
39 
40 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
41 {
42     UITouch *touch = touches.anyObject;
43     CGPoint location = [touch locationInView:self.view];
44     
45     // 关闭动画
46 //    [CATransaction begin];
47 //    [CATransaction setDisableActions:YES];
48     
49     //    位置
50     [self.myLayer setPosition:location];
51     
52     //    颜色
53     // 1) 随机生成一个颜色
54     NSInteger r1 = arc4random_uniform(self.colorArray.count);
55     [self.myLayer setBackgroundColor:[self.colorArray[r1] CGColor]];
56     
57     //    透明度
58     // 生成随机的透明度
59     CGFloat alpha = (arc4random_uniform(5) + 1.0) / 10.0 + 0.5;
60     [self.myLayer setOpacity:alpha];
61     
62     //    尺寸
63     NSInteger size = arc4random_uniform(50) + 51;
64     [self.myLayer setBounds:CGRectMake(0, 0, size, size)];
65     
66     //    圆角
67     NSInteger r2 = arc4random_uniform(20);
68     [self.myLayer setCornerRadius:r2];
69     
70     //    旋转角度
71     CGFloat angle = arc4random_uniform(180) / 180.0 * M_PI;
72     [self.myLayer setTransform:CATransform3DMakeRotation(angle, 0, 0, 1)];
73     
74     //    内容
75     NSInteger r3 = arc4random_uniform(self.imageArray.count);
76     UIImage *image = self.imageArray[r3];
77     [self.myLayer setContents:(id)image.CGImage];
78     
79 //    [CATransaction commit];
80 }

 

 

 

 

 

iOS开发——图形编程OC篇&(三)CALayer隐式动画

标签:

原文地址:http://www.cnblogs.com/iCocos/p/4553032.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!