当前位置: 移动技术网 > IT编程>移动开发>IOS > iOSUI篇—核心动画(关键帧动画CAKeyframeAnimation)

iOSUI篇—核心动画(关键帧动画CAKeyframeAnimation)

2018年10月05日  | 移动技术网IT编程  | 我要评论

Synacast,乡村春潮全文阅读,生辰八字免费算命

ios开发ui篇—核心动画(关键帧动画)

一、简单介绍

cakeyframeanimation是capropertyanimation的子类,跟cabasicanimation的区别是:cabasicanimation只能从一个数值(fromvalue)变到另一个数值(tovalue),而cakeyframeanimation会使用一个nsarray保存这些数值

属性解析:

values:就是上述的nsarray对象。里面的元素称为”关键帧”(keyframe)。动画对象会在指定的时间(duration)内,依次显示values数组中的每一个关键帧

path:可以设置一个cgpathref\cgmutablepathref,让层跟着路径移动。path只对calayer的anchorpoint和position起作用。如果你设置了path,那么values将被忽略

keytimes:可以为对应的关键帧指定对应的时间点,其取值范围为0到1.0,keytimes中的每一个时间值都对应values中的每一帧.当keytimes没有设置的时候,各个关键帧的时间是平分的

说明:cabasicanimation可看做是最多只有2个关键帧的cakeyframeanimation

二、代码示例

第一种方式:

代码:

 9 #import "yyviewcontroller.h"
10 
11 @interface yyviewcontroller ()
12 @property (weak, nonatomic) iboutlet uiview *customview;
13 
14 @end
15 
16 @implementation yyviewcontroller
17 
18 
19 -(void)touchesbegan:(nsset *)touches withevent:(uievent *)event
20 {
21     //1.创建核心动画
22     cakeyframeanimation *keyanima=[cakeyframeanimation animation];
23     //平移
24     keyanima.keypath=@"position";
25     //1.1告诉系统要执行什么动画
26     nsvalue *value1=[nsvalue valuewithcgpoint:cgpointmake(100, 100)];
27     nsvalue *value2=[nsvalue valuewithcgpoint:cgpointmake(200, 100)];
28     nsvalue *value3=[nsvalue valuewithcgpoint:cgpointmake(200, 200)];
29     nsvalue *value4=[nsvalue valuewithcgpoint:cgpointmake(100, 200)];
30     nsvalue *value5=[nsvalue valuewithcgpoint:cgpointmake(100, 100)];
31     keyanima.values=@[value1,value2,value3,value4,value5];
32     //1.2设置动画执行完毕后,不删除动画
33     keyanima.removedoncompletion=no;
34     //1.3设置保存动画的最新状态
35     keyanima.fillmode=kcafillmodeforwards;
36     //1.4设置动画执行的时间
37     keyanima.duration=4.0;
38     //1.5设置动画的节奏
39     keyanima.timingfunction=[camediatimingfunction functionwithname:kcamediatimingfunctioneaseineaseout];
40     
41     //设置代理,开始—结束
42     keyanima.delegate=self;
43     //2.添加核心动画
44     [self.customview.layer addanimation:keyanima forkey:nil];
45 }
46 
47 -(void)animationdidstart:(caanimation *)anim
48 {
49     nslog(@"开始动画");
50 }
51 
52 -(void)animationdidstop:(caanimation *)anim finished:(bool)flag
53 {
54     nslog(@"结束动画");
55 }
56 @end

说明:这个项目在storyboard中拖入了一个view,并和控制器中的custom进行了关联。

效果和打印结果:

\

补充:设置动画的节奏

\

第二种方式(使用path)让layer在指定的路径上移动(画圆):

代码:


 #import "yyviewcontroller.h"
    
     @interface yyviewcontroller ()
     @property (weak, nonatomic) iboutlet uiview *customview;
    
     @end
    
     @implementation yyviewcontroller

     -(void)touchesbegan:(nsset *)touches withevent:(uievent *)event
     {
        //1.创建动画对象
        cakeyframeanimation *anim = [cakeyframeanimation animation];
        
        anim.duration = 2;
        
        uibezierpath *path = [uibezierpath bezierpath];
        [path movetopoint:cgpointmake(50, 50)];
        [path addlinetopoint:cgpointmake(300, 50)];
        [path addlinetopoint:cgpointmake(300, 400)];
        
        anim.keypath =  @"position";
        anim.path = path.cgpath;
        
        //设置代理,开始—结束
        keyanima.delegate=self;
        [self.imagev.layer addanimation:anim forkey:nil];
        
    }
    
    -(void)animationdidstart:(caanimation *)anim42
    {
        nslog(@"开始动画");
    }
    
    -(void)animationdidstop:(caanimation *)anim finished:(bool)flag47
    {
        nslog(@"结束动画");
    }
    @end


说明:可以通过path属性,让layer在指定的轨迹上运动。

停止动画:

40 - (ibaction)stoponclick:(uibutton *)sender {
41     //停止self.customview.layer上名称标示为wendingding的动画
42     [self.customview.layer removeanimationforkey:@"wendingding"];
43 }

点击停止动画,程序内部会调用? [self.customview.layer removeanimationforkey:@"wendingding"];

停止self.customview.layer上名称标示为wendingding的动画。

三、图标抖动

代码示例:

 9 #import "yyviewcontroller.h"
10 #define angle2radian(angle)  ((angle)/180.0*m_pi)
11 
12 @interface yyviewcontroller ()
13 @property (weak, nonatomic) iboutlet uiimageview *iconview;
14 
15 @end
16 
17 
18 @implementation yyviewcontroller
19 
20 -(void)touchesbegan:(nsset *)touches withevent:(uievent *)event
21 {
22     //1.创建核心动画
23     cakeyframeanimation *keyanima=[cakeyframeanimation animation];
24     keyanima.keypath=@"transform.rotation";
25     //设置动画时间
26     keyanima.duration=0.1;
27     //设置图标抖动弧度
28     //把度数转换为弧度  度数/180*m_pi
29     keyanima.values=@[@(-angle2radian(4)),@(angle2radian(4)),@(-angle2radian(4))];
30     //设置动画的重复次数(设置为最大值)
31     keyanima.repeatcount=maxfloat;
32     
33     keyanima.fillmode=kcafillmodeforwards;
34     keyanima.removedoncompletion=no;
35     //2.添加动画
36     [self.iconview.layer addanimation:keyanima forkey:nil];
37 }
38 
39 @end

说明:图标向左向右偏转一个弧度(4),产生抖动的视觉效果。

程序界面:

\

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

  • ios uicollectionview实现横向滚动

    现在使用卡片效果的app很多,之前公司让实现一种卡片效果,就写了一篇关于实现卡片的文章。文章最后附有demo实现上我选择了使用uicollectionview ... [阅读全文]
  • iOS UICollectionView实现横向滑动

    本文实例为大家分享了ios uicollectionview实现横向滑动的具体代码,供大家参考,具体内容如下uicollectionview的横向滚动,目前我使... [阅读全文]
  • iOS13适配深色模式(Dark Mode)的实现

    iOS13适配深色模式(Dark Mode)的实现

    好像大概也许是一年前, mac os系统发布了深色模式外观, 看着挺刺激, 时至今日用着也还挺爽的终于, 随着iphone11等新手机的发售, ios 13系统... [阅读全文]
  • ios 使用xcode11 新建项目工程的步骤详解

    ios 使用xcode11 新建项目工程的步骤详解

    xcode11新建项目工程,新增了scenedelegate这个类,转而将原appdelegate负责的对ui生命周期的处理担子接了过来。故此可以理解为:ios... [阅读全文]
  • iOS实现转盘效果

    本文实例为大家分享了ios实现转盘效果的具体代码,供大家参考,具体内容如下demo下载地址: ios转盘效果功能:实现了常用的ios转盘效果,轮盘抽奖效果的实现... [阅读全文]
  • iOS开发实现转盘功能

    本文实例为大家分享了ios实现转盘功能的具体代码,供大家参考,具体内容如下今天给同学们讲解一下一个转盘选号的功能,直接上代码直接看viewcontroller#... [阅读全文]
  • iOS实现轮盘动态效果

    本文实例为大家分享了ios实现轮盘动态效果的具体代码,供大家参考,具体内容如下一个常用的绘图,主要用来打分之类的动画,效果如下。主要是ios的绘图和动画,本来想... [阅读全文]
  • iOS实现九宫格连线手势解锁

    本文实例为大家分享了ios实现九宫格连线手势解锁的具体代码,供大家参考,具体内容如下demo下载地址:效果图:核心代码://// clockview.m// 手... [阅读全文]
  • iOS实现卡片堆叠效果

    本文实例为大家分享了ios实现卡片堆叠效果的具体代码,供大家参考,具体内容如下如图,这就是最终效果。去年安卓5.0发布的时候,当我看到安卓全新的material... [阅读全文]
  • iOS利用余弦函数实现卡片浏览工具

    iOS利用余弦函数实现卡片浏览工具

    本文实例为大家分享了ios利用余弦函数实现卡片浏览工具的具体代码,供大家参考,具体内容如下一、实现效果通过拖拽屏幕实现卡片移动,左右两侧的卡片随着拖动变小,中间... [阅读全文]
验证码:
移动技术网