#import <UIKit/UIKit.h>
@interface SecondViewController : UIViewController
@end
#import "SecondViewController.h"
@interface SecondViewController ()
{
}
@property (nonatomic, retain) UIView *animationView;
@end
@implementation SecondViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
self.navigationItem.title = @"CALayer";
//CALayer, 继承于NSObject;
//UIView 和 CALayer 的关系:
//1. UIView可以响应事件, CALayer不可以;
//2. UIView侧重于内容的管理, CALayer侧重于内容的绘制
//3. 两者紧密联系, 缺一不可;
//4. 总之一句话, 发之于肤, 血之于肉, 灵之于魂,
//UIView自带一个readly的属性layer(CALayer), 大小和UIView的大小一致;
self.animationView = [[UIView alloc] initWithFrame:CGRectMake(100, 300, 100, 100)];
self.animationView.backgroundColor = [UIColor redColor];
//比较重要layer属性
//设置圆角弧度;
// self.animationView.layer.cornerRadius = 50;
//设置描边:
self.animationView.layer.borderWidth = 3;
//设置颜色;
self.animationView.layer.borderColor = [UIColor greenColor].CGColor;
//设置偏移:
self.animationView.layer.shadowOffset = CGSizeMake(10, 100);
//设置阴影颜色:
self.animationView.layer.shadowColor = [UIColor blueColor].CGColor;
//设置阴影透明度;(默认0)
self.animationView.layer.shadowOpacity = 1;
//位置:锚点距superLayer原点的距离
self.animationView.layer.position = CGPointMake(150, 300);
//锚点; 默认规定, 一个视图的左上角为(0, 0), 右下角为(1, 1), 锚点默认值为(0.5, 0.5), 与视图的中心点重合, 锚点关系着视图做变型(比如:旋转)的基准点;
self.animationView.layer.anchorPoint = CGPointMake(0, 0);
//锚点和position, 两者任意一个发生变化, 不影响另外一个, 并且为了保证另一个不变, 要改变view的frame位置
[self.view addSubview:self.animationView];
[self.animationView release];
// CAAnimation: 作用于CALayer层的动画
// CAPropertyAnimation, 属性动画, 是抽象子类;
// CABasieAnimation, 基本动画
// CAKeyframeAnimation
UIButton *basicButton = [UIButton buttonWithType:UIButtonTypeSystem];
basicButton.frame = CGRectMake(0, 300, 375, 50);
basicButton.titleLabel.font = [UIFont systemFontOfSize:30];
[basicButton setTitle:@"CABasicAnimation" forState:UIControlStateNormal];
[basicButton addTarget:self action:@selector(basic) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:basicButton];
UIButton *keyButton = [UIButton buttonWithType:UIButtonTypeSystem];
keyButton.frame = CGRectMake(0, 150, 375, 50);
keyButton.titleLabel.font = [UIFont systemFontOfSize:30];
[keyButton setTitle:@"CAKeyAnimation" forState:UIControlStateNormal];
[keyButton addTarget:self action:@selector(keyFrame) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:keyButton];
UIButton *transitionButton = [UIButton buttonWithType:UIButtonTypeSystem];
transitionButton.frame = CGRectMake(0, 450, 375, 50);
transitionButton.titleLabel.font = [UIFont systemFontOfSize:30];
[transitionButton setTitle:@"CATranAnimation" forState:UIControlStateNormal];
[transitionButton addTarget:self action:@selector(transition) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:transitionButton];
UIButton *groupButton = [UIButton buttonWithType:UIButtonTypeSystem];
groupButton.frame = CGRectMake(0, 550, 375, 50);
groupButton.titleLabel.font = [UIFont systemFontOfSize:30];
[groupButton setTitle:@"CAGroupAnimation" forState:UIControlStateNormal];
[groupButton addTarget:self action:@selector(group) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:groupButton];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
/*
#pragma mark - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
}
*/
- (void)basic
{
//CAAnimation没有真实改变属性值, 只是在模拟属性值改变,
//KeyPath, 写属性的名字;(属性的属性)或路径
// CABasicAnimation *basic = [CABasicAnimation animationWithKeyPath:@"cornerRadius"];
CABasicAnimation *basic = [CABasicAnimation animationWithKeyPath:@"bounds.size"];
//设置时长
// basic.duration = 10;
//设置
basic.speed = 0.1;
// basic.fromValue = @10;
// basic.toValue = @200;
// basic.fromValue = [NSValue valueWithCGSize:CGSizeMake(10, 20)];
// basic.toValue = [NSValue valueWithCGSize:CGSizeMake(100, 100)];
basic.fromValue = @[@10, @10];
basic.toValue = @[@100, @100];
basic.delegate = self;
[self.animationView.layer addAnimation:basic forKey:@"aa"];
}
- (void)keyFrame
{
//CAKeyframeAnimation 关键帧动画
CAKeyframeAnimation *keyframe = [CAKeyframeAnimation animationWithKeyPath:@"position"];
//keyframe.values
//keyframe.keyTimes
//设置时间;
keyframe.duration = 5;
keyframe.values = @[[NSValue valueWithCGPoint:CGPointMake(0, 0)],
[NSValue valueWithCGPoint:CGPointMake(10, 10)],
[NSValue valueWithCGPoint:CGPointMake(40, 40)],
[NSValue valueWithCGPoint:CGPointMake(160, 160)],
[NSValue valueWithCGPoint:CGPointMake(370, 558)]];
//keyTimes,数组中的值不能够大于1, 并且必须是递增的;
keyframe.keyTimes = @[@0.1, @0.5, @0.7, @0.8, @1];
[self.animationView.layer addAnimation:keyframe forKey:@"bb"];
}
- (void)transition
{
// CATransition,过渡动画;
CATransition *transition = [CATransition animation];
// transition.type
// transition.subtype
transition.type =
kCATransitionMoveIn;
// kCATransitionFade;
// kCATransitionPush;
// kCATransitionReveal;
transition.subtype =
// kCATransitionFromTop;
// kCATransitionFromRight;
// kCATransitionFromLeft;
kCATransitionFromBottom;
[self.animationView.layer addAnimation:transition forKey:@"cc"];
}
- (void)group
{
// CAAnimationGroup ,动画组
CAAnimationGroup *group = [CAAnimationGroup animation];
// group.animations = @[basic, transition, keyframe];
[self.animationView.layer addAnimation:group forKey:@"dd"];
}
//-(void)animationDidStart:(CAAnimation *)anim
//{
// NSLog(@"%%@", )
//}
@end