iOS动画:UIView动画和CALayer动画(CABasicAnimation、CAKeyframeAnimation的使用)

iOS中的动画有两种实现方式,一种是UIView来实现动画,另一种动画是通过CALayer来实现,下面介绍两种动画的简单实现:

一、UIView动画的实现

   UIView使用Context来实现动画

关键代码:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

//参数1 动画名称 参数2 要实现动画的对象上下文

     

    [UIView beginAnimations:@"attribute" context:_showImageView];

     

    //设置动画的时间

    [UIView setAnimationDuration:1.0f];

     

    //设置动画延迟时间

//    [UIView setAnimationDelay:2];

     

    //设置视图center 实现试图移动动画

    _showImageView.center = CGPointMake(100, 100);

     

    //设置alpha值:视图透明度

    _showImageView.alpha = 0.2f;

     

    //设置背景颜色

    _showImageView.backgroundColor = [UIColor greenColor];

     

    //UIView动画 设置代理

    [UIView setAnimationDelegate:self];

     

    //动画将要开始代理方法

    [UIView setAnimationWillStartSelector:@selector(animationWillStart:context:)];

     

    //动画已经结束代理方法

    [UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];

     

    //提交动画设置,执行动画

    [UIView commitAnimations];

使用Block实现的动画:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

//UIView动画, 使用Block实现

    [UIView animateWithDuration:1.0f animations:^{

         

        //通过设置translation 实现视图的偏移

        if ([self.mySwitch isOn]) {

             

            //基于上一次的translation

            _showImageView.transform = CGAffineTransformTranslate(_showImageView.transform, 50, 0);

        else {

             

            //基于原始的translation

            _showImageView.transform = CGAffineTransformMakeTranslation(-50, 0);

        }

    }];

二、CALayer动画的实现

CABasic动画的实现:根据初始位置和结束位置确定动画


1

2

3

4

5

6

//CABasic 有两个属性 fromValue 动画开始值,toValue动画结束值

    CABasicAnimation *animation1 = [CABasicAnimation animationWithKeyPath:@"position"];

    [animation1 setDuration:2];

    animation1.fromValue = [NSValue valueWithCGPoint:CGPointMake(150, 150)];

    animation1.toValue = [NSValue valueWithCGPoint:CGPointMake(200, 200)];

    [_imageView.layer addAnimation:animation1 forKey:@"position"];

创建一组动画:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

//创建组动画对象

    CAAnimationGroup *group = [CAAnimationGroup animation];

     

    //CABasic动画

    CABasicAnimation *animation1 = [CABasicAnimation animationWithKeyPath:@"transform.scale.y"];

    animation1.fromValue = @1.5;

    animation1.toValue = @0.5;

     

    //关键帧动画

    CAKeyframeAnimation *animation2 = [CAKeyframeAnimation animationWithKeyPath:@"position"];

    animation2.values = @[[NSValue valueWithCGPoint:CGPointMake(100, 100)],

                         [NSValue valueWithCGPoint:CGPointMake(200, 150)],

                         [NSValue valueWithCGPoint:CGPointMake(100, 200)],

                         [NSValue valueWithCGPoint:CGPointMake(200, 250)]];

     

    //group添加动画数组,group中动画对象并发执行

    [group setAnimations:@[animation1, animation2]];

    [group setDuration:4.0f];

    [_imageView.layer addAnimation:group forKey:@"group"];

时间: 2024-11-06 03:56:02

iOS动画:UIView动画和CALayer动画(CABasicAnimation、CAKeyframeAnimation的使用)的相关文章

详解iOS开发中的转场动画和组动画以及UIView封装动画_IOS

一.转场动画 CAAnimation的子类,用于做转场动画,能够为层提供移出屏幕和移入屏幕的动画效果.iOS比Mac OS X的转场动画效果少一点 UINavigationController就是通过CATransition实现了将控制器的视图推入屏幕的动画效果 属性解析: type:动画过渡类型 subtype:动画过渡方向 startProgress:动画起点(在整体动画的百分比) endProgress:动画终点(在整体动画的百分比) 转场动画代码示例 1.界面搭建 2.实现代码 复制代码

iOS开发UI篇—核心动画(UIView封装动画)

一.UIView动画(首尾) 1.简单说明 UIKit直接将动画集成到UIView类中,当内部的一些属性发生改变时,UIView将为这些改变提供动画支持 执行动画所需要的工作由UIView类自动完成,但仍要在希望执行动画时通知视图,为此需要将改变属性的代码放在[UIViewbeginAnimations:nil context:nil]和[UIView commitAnimations]之间 常见方法解析: + (void)setAnimationDelegate:(id)delegate 设置

实现UIView的无限旋转动画(非CALayer动画)

实现UIView的无限旋转动画(非CALayer动画) 效果: 素材: 源码: // // ViewController.m // Animation // // Created by YouXianMing on 15/2/5. // Copyright (c) 2015年 YouXianMing. All rights reserved. // #import "ViewController.h" @interface ViewController () @property (no

暂停、恢复CALayer 动画

CALayer都是实现了CAMediaTiming协议(或者叫做接口).所以layer的动画有一个很有意思的属性speed.如果一个layer的动画速度变成0.0的时候,很显然这个动画就不再动了.设置layer的speed为0时,layer的动画暂停.speed属性设置为任意大于0的值时,动画回复. 要暂停一个动画时: -(void)pauseLayer:(CALayer*)layer { CFTimeInterval pausedTime = [layer convertTime:CACurr

iOS之小功能模块--彩虹动画进度条学习和自主封装改进

前言: 首先展示一下这个iOS小示例的彩色进度条动画效果: 阅读本文先说说好处:对于基础不好的读者,可以直接阅读文末尾的"如何使用彩虹动画进度条"章节,然后将我封装好的这个功能模块类用到你的工程项目中即可. 这个效果的示例是老外Nick Jensen在2013年写的一个作品:使用CAGradientLayer的动画进度条View. 本人阅读了老外的源码之后,觉得老外这个进度条的效果很不错,但是觉得他写的代码有待改进. 小贴士:读者可以直接将老外的源码下载下来,跑一下,然后对比本人写的博

实例讲解iOS应用UI开发之基础动画的创建_IOS

一.简单介绍 CAPropertyAnimation的子类 属性解析: fromValue:keyPath相应属性的初始值 toValue:keyPath相应属性的结束值 随着动画的进行,在长度为duration的持续时间内,keyPath相应属性的值从fromValue渐渐地变为toValue 如果fillMode=kCAFillModeForwards和removedOnComletion=NO,那么在动画执行完毕后,图层会保持显示动画执行后的状态.但在实质上,图层的属性值还是动画执行前的初

iOS开发中常用的各种动画、页面切面效果_IOS

今天主要用到的动画类是CALayer下的CATransition至于各种动画类中如何继承的在这也不做赘述,网上的资料是一抓一大把.好废话少说切入今天的正题. 一.封装动画方法 1.用CATransition实现动画的封装方法如下,每句代码是何意思,请看注释之. #pragma CATransition动画实现 - (void) transitionWithType:(NSString *) type WithSubtype:(NSString *) subtype ForView : (UIVi

CALayer动画的暂停,恢复,以及结束时候的回调

CALayer动画的暂停,恢复,以及结束时候的回调 源码如下: // // ViewController.m // AnimationLineView // // Created by YouXianMing on 14/11/7. // Copyright (c) 2014年 YouXianMing. All rights reserved. // #import "ViewController.h" #import "YXGCD.h" @interface Vi

实例讲解iOS中的CATransition转场动画使用_IOS

一.简介CATransition是CAAnimation的子类,用于做转场动画 能够为图层提供移出屏幕和移入屏幕的动画效果.iOS比Mac OS X的转场动画效果少一点 如:UINavigationController导航控制器就是通过CATransition转场动画实现了将控制器的视图推入屏幕的动画效果 CATransition头文件 动画属性: type:动画过渡类型 subtype:动画过渡方向 startProgress:动画起点(在整体动画的百分比) endProgress:动画终点(