calayer就是用来做动画,所以内部就隐含了一些动画。改变属性的时候就触发动画,默认的动画时长时0.25秒
如果可动画属性发生改变,就会产生动画
例如
1)bounds:缩放动画
2)position 平移动画
3)opacity 淡入淡出动画,改变了透明度
等
在帮助里搜索animatable可以查到可动画属性
改变这些属性,都可以触发动画。
//
// MainViewController.m
// CALayer隐式动画_demo1
//
// Created by mac on 13-10-1.
// Copyright (c) 2013年 mac. All rights reserved.
//
#import "MainViewController.h"
#import <QuartzCore/QuartzCore.h>
@interface MainViewController ()
@property (nonatomic,weak) CALayer *mylayer;
@property (nonatomic,strong) NSArray *colorlist;
@property (nonatomic,strong) NSArray *imagelist;
@end
@implementation MainViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
CALayer *mylayer = [CALayer layer];
[mylayer setBounds:CGRectMake(0, 0, 100, 100)];
[mylayer setPosition:CGPointMake(50, 50)];
[mylayer setBackgroundColor:[UIColor redColor].CGColor];
[self.view.layer addSublayer:mylayer];
self.mylayer = mylayer;
self.colorlist = @[[UIColor redColor],[UIColor yellowColor],[UIColor blueColor],[UIColor grayColor]];
UIImage *image1 = [UIImage imageNamed:@"头像1.png"];
UIImage *image2 = [UIImage imageNamed:@"头像2.png"];
self.imagelist = @[image1,image2];
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
CGPoint point = [touch locationInView:self.view];
// 位置
[self.mylayer setPosition:point];
// 颜色
NSInteger icolor = arc4random_uniform(self.colorlist.count);
[self.mylayer setBackgroundColor:[self.colorlist[icolor] CGColor]];
// 透明度
CGFloat fopacity = arc4random_uniform(50)/100.0 + 0.5;
[self.mylayer setOpacity:fopacity];
// 尺寸
CGFloat size = arc4random_uniform(50) + 50;
[self.mylayer setBounds:CGRectMake(0, 0, size, size)];
// 圆角半径
CGFloat iradius = arc4random_uniform(20);
[self.mylayer setCornerRadius:iradius];
// 旋转角度
CGFloat fangle = M_PI * arc4random_uniform(180)/180.0;
[self.mylayer setTransform:CATransform3DMakeRotation(fangle, 0, 0, 1)];
// 图层内容
NSInteger irdmimage = arc4random_uniform(2);
UIImage *image = self.imagelist[irdmimage];
[self.mylayer setContents:(id)image.CGImage];
}
@end
// 取消动画效果
[CATransactionbegin];
[CATransactionsetDisableActions:YES];
// 这期间可以设置改变属性,伴随的隐式动画将不执行。
[CATransactioncommit];