iOS--Animation动画

#import "ViewController.h"

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIView *redView;

@property (weak, nonatomic) IBOutlet UIView *greenView;

@property (weak, nonatomic) IBOutlet UIView *blueView;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
  
}



- (IBAction)animationAction1:(UIButton *)sender {
    
    NSLog(@"属性动画");
    //开始动画
    [UIView beginAnimations:@"属性动画" context:nil];
    //设置动画持续时间
    [UIView setAnimationDuration:2];
    //设置动画延迟时间
//    [UIView setAnimationDelay:2];
    //设置重复次数
    [UIView setAnimationRepeatCount:5];
    //设置自动翻转
    [UIView setAnimationRepeatAutoreverses:YES];
    //设置过渡效果
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    //设置代理
    [UIView setAnimationDelegate:self];
    //给动画添加事件(一定要先设置代理)
    [UIView setAnimationWillStartSelector:@selector(startAnimation)];
//    [UIView setAnimationWillStartSelector:<#(nullable SEL)#>:@selector(stopAnimation)];
//    _redView.center = CGPointMake(300, 150);
    _redView.center = CGPointMake(300, 600);
    //结束动画
    [UIView commitAnimations];
}



- (IBAction)animationAction2:(UIButton *)sender {
    NSLog(@"Block动画");
    
//    [UIView animateWithDuration:1 animations:^{
//        //延期
//        [UIView setAnimationDelay:1];
//        //动画进行时需要的操作
//        _redView.backgroundColor = [UIColor yellowColor];
//    }];
    
    
//    [UIView animateWithDuration:2 animations:^{
//       //进行时
//    
//    } completion:^(BOOL finished) {
//       //完成时
//        
//    }];
 
    
    [UIView animateWithDuration:1 delay:2 options:UIViewAnimationOptionAutoreverse animations:^{
        [UIView setAnimationRepeatCount:4];
    } completion:^(BOOL finished) {
        
    }];
    

    
}

- (IBAction)UIViewTransition:(UIButton *)sender {
    NSLog(@"视图切换 过度 效果");
    //和UI第三节容器试图控制器切换子视图控制器的方法类似
//    [UIView transitionFromView:_blueView toView:_greenView duration:1 options:UIViewAnimationOptionTransitionCurlUp completion:^(BOOL finished) {
//        NSLog(@"转换蓝绿视图成功");
//    }];
    
    [UIView transitionWithView:_greenView duration:1 options:UIViewAnimationOptionAutoreverse animations:^{
        _blueView.backgroundColor = [UIColor blackColor];
    } completion:^(BOOL finished) {
        _blueView.backgroundColor = [UIColor blueColor];
    }];
       
}

- (IBAction)DCGAffineTransfrom:(UIButton *)sender {
    
    NSLog(@"2D仿射变换");
    //开始动画
    [UIView beginAnimations:@"2D仿射变换" context:nil];
    
    [UIView setAnimationDuration:2];
    [UIView setAnimationRepeatCount:8];
    
#pragma mark  ---旋转---
//    //基于原始
////    _redView.transform = CGAffineTransformMakeRotation(M_PI_2);
//
//    
//    //基于上一次
//    _redView.transform = CGAffineTransformRotate(_redView.transform,M_PI_2/3);
//    
//    
//    //结束动画
//    [UIView commitAnimations];
    
    
    
#pragma mark ---- 缩放 ---
    
    
//    _redView.transform = CGAffineTransformMakeScale(2, 0.5);
    
    _redView.transform = CGAffineTransformMake(-1, cos(M_PI_2/3), 3, sin(M_PI), 1, 1);
    
    
    //结束动画
    [UIView commitAnimations];

}

- (IBAction)basicAction:(UIButton *)sender {
    NSLog(@"basic");
 /*
//    CABasicAnimation *basic = [CABasicAnimation animationWithKeyPath:@"bounds.size"];//引号内的字母不能错;
//    
//    
//    
//    CGSize fromSize = CGSizeMake(100, 100);
//    CGSize toSize = CGSizeMake(20, 200);
//    
//    //设置初始值
//    basic.fromValue = [NSValue valueWithCGSize:fromSize];
//    //设置结束值
//    basic.toValue = [NSValue valueWithCGSize:toSize];
//    //动画只是一个效果,不会改变属性的值若想改变属性的值,需要手动改变
//    CGRect newRect = _redView.layer.bounds;
//    newRect.size = toSize;
//    _redView.layer.bounds = newRect;
//    
//    [_redView.layer addAnimation:basic forKey:@"test"];
    */
 /*
    CABasicAnimation *basic1 = [CABasicAnimation animationWithKeyPath:@"frame"];
    
    CGRect fromFrame = CGRectMake(10, 10, 100, 100);
    CGRect toFrame = CGRectMake(50, 10, 50, 150);
    
    basic1.fromValue = [NSValue valueWithCGRect:fromFrame];
    basic1.toValue = [NSValue valueWithCGRect:toFrame];
    CGRect newrect = _redView.layer.bounds;

    _redView.layer.bounds = newrect;
    
    [_redView.layer addAnimation:basic1 forKey:@"test1"];
    
   */
    
    //取出redvview的layer层
    CALayer *myLayer = _redView.layer;
    //获取layer的位置
    CGPoint position = myLayer.position;
    //设置晃动时两个终点的位置
    CGPoint x1 = CGPointMake(position.x-50, position.y);
    CGPoint x2 = CGPointMake(position.x+50, position.y);
    //设置动画
    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];
    //设置开始位置
    [animation setFromValue:[NSValue valueWithCGPoint:x1]];
    //设置结束位置
    [animation setToValue:[NSValue valueWithCGPoint:x2]];
    //设置自动反转
    [animation setAutoreverses:YES];
    //设置持续时间
    [animation setDuration:0.06];
    //设置重复次数
    [animation setRepeatCount:4];
    //添加动画
    [myLayer addAnimation:animation forKey:@"test"];
    
    
}


- (IBAction)keyFrameAction:(UIButton *)sender {
    NSLog(@"keyFrame");
    //创建并制定路径
    CAKeyframeAnimation *keyFrame = [CAKeyframeAnimation animationWithKeyPath:@"position"];
    //设置运动轨迹
    keyFrame.values = [NSArray arrayWithObjects:[NSValue valueWithCGPoint:CGPointMake(50, 170)],[NSValue valueWithCGPoint:CGPointMake(364, 170)] , [NSValue valueWithCGPoint:CGPointMake(110 , 364)],[NSValue valueWithCGPoint:CGPointMake(207, 50)],[NSValue valueWithCGPoint:CGPointMake(300, 364)],[NSValue valueWithCGPoint:CGPointMake(50, 170)],nil];
    
    //设置持续时间
    keyFrame.duration = 12;
    //设置关键帧时间
    keyFrame.keyTimes = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.1], [NSNumber numberWithFloat:0.2],[NSNumber numberWithFloat:0.3], [NSNumber numberWithFloat:0.4], [NSNumber numberWithFloat:0.5], [NSNumber numberWithFloat:0.6],  nil];
    
    //添加动画
    [_redView.layer addAnimation:keyFrame forKey:@"test1"];
    

}

- (IBAction)groupAction:(UIButton *)sender {
    NSLog(@"group");
    
        CABasicAnimation *basic = [CABasicAnimation animationWithKeyPath:@"bounds.size"];//引号内的字母不能错;
    
    
    
        CGSize fromSize = CGSizeMake(100, 100);
        CGSize toSize = CGSizeMake(20, 200);
    
        //设置初始值
        basic.fromValue = [NSValue valueWithCGSize:fromSize];
        //设置结束值
        basic.toValue = [NSValue valueWithCGSize:toSize];
        //动画只是一个效果,不会改变属性的值若想改变属性的值,需要手动改变
        CGRect newRect = _redView.layer.bounds;
        newRect.size = toSize;
        _redView.layer.bounds = newRect;

    
    //创建并制定路径
    CAKeyframeAnimation *keyFrame = [CAKeyframeAnimation animationWithKeyPath:@"position"];
    //设置运动轨迹
    keyFrame.values = [NSArray arrayWithObjects:[NSValue valueWithCGPoint:CGPointMake(50, 170)],[NSValue valueWithCGPoint:CGPointMake(364, 170)] , [NSValue valueWithCGPoint:CGPointMake(110 , 364)],[NSValue valueWithCGPoint:CGPointMake(207, 50)],[NSValue valueWithCGPoint:CGPointMake(300, 364)],[NSValue valueWithCGPoint:CGPointMake(50, 170)],nil];
    
    //设置持续时间
    keyFrame.duration = 6;
    //设置关键帧时间
    keyFrame.keyTimes = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.1], [NSNumber numberWithFloat:0.2],[NSNumber numberWithFloat:0.3], [NSNumber numberWithFloat:0.4], [NSNumber numberWithFloat:0.5], [NSNumber numberWithFloat:0.6],  nil];
    
    //创建Group动画
    CAAnimationGroup *group = [CAAnimationGroup animation];
    //设置持续时间
    group.duration = 3;
    //将动画添加到数组
    group.animations = @[basic, keyFrame];
    
    
    [_redView.layer addAnimation:group forKey:@"test2"];
    
}

- (IBAction)CATransitionAction:(UIButton *)sender {
    NSLog(@"CATransition");
    
    //创建layer动画
    CATransition *sition = [CATransition animation];
    //
    sition.duration = 2;
    //
    sition.subtype = kCATransitionFromBottom;
    
    //设置过渡效果
    //1.系统提供样式
//    sition.type = kCATransitionPush;
    //2.私有API(最好不用,有上线被拒的风险)
    sition.type = @"cameraIrisHollowOpen";
    //添加动画
    [_redView.layer addAnimation:sition forKey:@"test"];
    
}
/*
 以下是基本的四种效果
 kCATransitionPush 推入效果
 kCATransitionMoveIn 移入效果
 kCATransitionReveal 截开效果
 kCATransitionFade 渐入渐出效果
 
 以下API效果可以安全使用
 cube 方块
 suckEffect 三角
 rippleEffect 水波抖动
 pageCurl 上翻页
 pageUnCurl 下翻页
 oglFlip 上下翻转
 cameraIrisHollowOpen 镜头快门开
 cameraIrisHollowClose 镜头快门开
 
 
 以下API效果请慎用
 spewEffect 新版面在屏幕下方中间位置被释放出来覆盖旧版面.
 genieEffect 旧版面在屏幕左下方或右下方被吸走, 显示出下面的新版面
 unGenieEffect 新版面在屏幕左下方或右下方被释放出来覆盖旧版面.
 twist 版面以水平方向像龙卷风式转出来.
 tubey 版面垂直附有弹性的转出来.
 swirl 旧版面360度旋转并淡出, 显示出新版面.
 charminUltra 旧版面淡出并显示新版面.
 zoomyIn 新版面由小放大走到前面, 旧版面放大由前面消失.
 zoomyOut 新版面屏幕外面缩放出现, 旧版面缩小消失.
 oglApplicationSuspend 像按”home” 按钮的效果.
 */

-(void)startAnimation{
    
    NSLog(@"开始动画");
}

-(void)stopAnimation{
    
    NSLog(@"停止动画");
}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容