标签:
CALayer隐式动画
在前面几讲中已经提到,每一个UIView内部都默认关联着一个CALayer,我们可用称这个Layer为Root Layer(根层)。所有的非Root Layer,也就是手动创建的CALayer对象,都存在着隐式动画。
* 当对非Root Layer的部分属性进行相应的修改时,默认会自动产生一些动画效果,这些属性称为Animatable Properties(可动画属性)。
* 列举几个常见的Animatable Properties:
比如:假设一开始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 }
标签:
原文地址:http://www.cnblogs.com/iCocos/p/4553032.html