博客已经迁移到 www.chjsun.top

在自定义动画的时候,CABasicAnimation用的还算的蛮多的。

在此先介绍一下CABasicAnimation怎么使用。

属性介绍

 属性 说明
 duration  动画执行的时长
 repeatCount  重复的次数。一直重复设置为 HUGE_VALF
 repeatDuration  设置动画的时间。在该时间内动画一直执行,不计次数
 beginTime  指定动画开始的时间。可以通过(当前时间+秒数)来实现延迟动画
 timingFunction 设置动画的速度的变化
 autoreverses  动画结束时是否执行逆动画
 fromValue  所改变属性的起始值
 toValue  所改变属性的结束值
 byValue  所改变属性相同起始值的改变量

怎么使用就不用说了,在这里主要说一下CABasicAnimation的代理使用方法。

有同学要问了,怎么一个代理还要注意,我只说一点,他的代理是strong。

这里就要看看了

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; line-height: 19.0px; font: 13.0px "Helvetica Neue" }
span.s1 { font: 14.0px "Helvetica Neue" }

anim是添加到layer上的,layer属于view,view属于control,anim又持有control,必然出现循环引用。

废话不多说,下面是解决方法。

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; line-height: 19.0px; font: 14.0px "Helvetica Neue" }
span.s1 { font: 13.0px "Helvetica Neue" }

第一种:

   第一种是取巧的方法,不用代理了,既然动画是自己写的,动画时长也是知道的,

  干脆直接使用 ```[self performSelector:@selector(animationDidStop) withObject:self afterDelay:time];```

  在time秒之后调用,模仿动画完成之后调用。

  这样就有个问题,万一由于某种原因导致time秒「前后」执行完了,逻辑就会出现瑕疵,不够完美。

第二种:

  第二种方法是创建一个新的类,假设是JRAnimDelegate;

```

.h

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #d12f1b }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #703daa }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #000000 }
p.p4 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #000000; min-height: 16.0px }
p.p5 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #ba2da2 }
span.s1 { color: #78492a }
span.s2 { }
span.s3 { color: #ba2da2 }
span.s4 { color: #000000 }
span.s5 { color: #703daa }
span.s6 { color: #4f8187 }

#import <Foundation/Foundation.h>

@class JRAnimDelegatel;

@protocol JRAnimDelegateDelegate <NSObject>

@optional

- (void)animationDidStop;

@end

@interface JRAnimDelegate : NSObject<CAAnimationDelegate>

@property(nonatomic, assign) id<JRAnimDelegateDelegate> delegate;

@end

.m

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #d12f1b }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #000000; min-height: 16.0px }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #000000 }
p.p4 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #31595d }
p.p5 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #ba2da2 }
span.s1 { color: #78492a }
span.s2 { }
span.s3 { color: #ba2da2 }
span.s4 { color: #703daa }
span.s5 { color: #4f8187 }
span.s6 { color: #3e1e81 }
span.s7 { color: #000000 }

#import "JRAnimDelegate.h"

@implementation JRAnimDelegate

- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag{

if ([self.delegate respondsToSelector:@selector(animationDidStop)]) {

[self.delegate animationDidStop];

}

}

@end

```

染后使用时

```

JRAnimDelegate *animDelegate = [[JRAnimDelegate alloc] init];

animDelegate.delegate = self;

animation.delegate = animDelegate;

```

转化之后,会打破循环引用。在新的类中将代理转回来,这样也可以使用,这样虽然会使逻辑变的复杂,但是能保证一定是动画执行完成之后调用

两种方法我都测试过,都可以用,具体用哪种 ,每个人都有自己的理解和使用的场景。诸君自便

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; line-height: 19.0px; font: 14.0px "Helvetica Neue" }
span.s1 { font: 13.0px "Helvetica Neue" }

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #000000 }
span.s1 { }
span.s2 { color: #4f8187 }
span.s3 { color: #3e1e81 }
span.s4 { color: #ba2da2 }
span.s5 { color: #703daa }

CABasicAnimation的delegate的坑的更多相关文章

  1. 反爬虫:利用ASP.NET MVC的Filter和缓存(入坑出坑) C#中缓存的使用 C#操作redis WPF 控件库——可拖动选项卡的TabControl 【Bootstrap系列】详解Bootstrap-table AutoFac event 和delegate的分别 常见的异步方式async 和 await C# Task用法 c#源码的执行过程

    反爬虫:利用ASP.NET MVC的Filter和缓存(入坑出坑)   背景介绍: 为了平衡社区成员的贡献和索取,一起帮引入了帮帮币.当用户积分(帮帮点)达到一定数额之后,就会“掉落”一定数量的“帮帮 ...

  2. CABasicAnimation使用总结

    CABasicAnimation使用总结 实例化 使用方法animationWithKeyPath:对 CABasicAnimation进行实例化,并指定Layer的属性作为关键路径进行注册. //围 ...

  3. C# 闭包问题-你被”坑“过吗?

    引言 闭包是什么?以前看面试题的时候才发现这个名词. 闭包在实际项目中会有什么问题?现在就让我们一起来看下这个不太熟悉的名词. 如果在实际工作中用到了匿名函数和lamada表达式,那你就应该高度注意啦 ...

  4. iOS delegate

    有两个scene,分别为Scene A和Scene B.Scene A上有一个UIButton(Button A)和一个UILable(Lable A):Scene B上有一个UITextFiled( ...

  5. 基本动画CABasicAnimation - 完成之后闪回初始状态

    基本动画CABasicAnimation 结束之后,默认闪回初始状态,那怎么解决呢? position需要设备两个属性: // MARK: - 结束后不要闪回去 anim.removedOnCompl ...

  6. CABasicAnimation的基本使用方法(移动·旋转·放大·缩小)

    出处:http://blog.csdn.net/iosevanhuang/article/details/14488239 CABasicAnimation类的使用方式就是基本的关键帧动画. 所谓关键 ...

  7. 之一:CABasicAnimation - 基本动画

    嗷呜嗷呜嗷呜 // 将视图作为属性方便后面执行多个不同动画 _myView = [[UIView alloc] init]; _myView.layer.position = CGPointMake( ...

  8. CABasicAnimation animationWithKeyPath 一些规定的值

    CABasicAnimation animationWithKeyPath Types When using the ‘CABasicAnimation’ from the QuartzCore Fr ...

  9. 动画 CABasicAnimation animationWithKeyPath 一些规定的值

    CABasicAnimation animationWithKeyPath Types When using the ‘CABasicAnimation’ from the QuartzCore Fr ...

随机推荐

  1. 20145236 GDB调试汇编堆栈过程分析

    GDB调试汇编堆栈过程分析 首先需要输入sudo apt-get install libc6-dev-i386安装一个库才能产生汇编代码,然后输入gcc - g example.c -o exampl ...

  2. android .9图的作用

    参考:http://www.cnblogs.com/lianghui66/archive/2013/01/08/2850581.html .9图的介绍 1.这种格式的图片是Android平台上一种被拉 ...

  3. 用ORBSLAM2运行TUM Dataset数据集

    参照https://github.com/raulmur/ORB_SLAM2/blob/master/README.md 运行 4. Monocular Examples TUM Dataset 数据 ...

  4. CentOS7下zip解压和unzip压缩文件

    1.安装zip.unzip应用. yum install zip unzip

  5. MYSQL5.7版本sql_mode=only_full_group_by问题

    具体出错提示: [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggr ...

  6. vuejs开发组件分享之H5图片上传、压缩及拍照旋转的问题处理

    一.前言 三年.net开发转前端已经四个月了,前端主要用webpack+vue,由于后端转过来的,前端不够系统,希望分享下开发心得与园友一起学习. 图片的上传之前都是用的插件(ajaxupload), ...

  7. .htaccess下Flags速查表

    Flags是可选参数,当有多个标志同时出现时,彼此间以逗号分隔. 速查表: RewirteRule 标记 含义 描述 R Redirect 发出一个HTTP重定向 F Forbidden 禁止对URL ...

  8. python对XML的解析

    原文:http://blog.csdn.net/yueguanghaidao/article/details/7265246 python有三种方法解析XML,SAX,DOM,以及ElementTre ...

  9. (BFS)aoj0558-Cheese

    题目地址 根据题意,必须按从1吃到n的顺序.建立vi数组记录去没去过某一点,从起点向四周搜索,合法且未去过就入队列.每当找到符合此时应吃的位置,就将这个位置改为'.'并刷新vi数组,清空队列(因为必须 ...

  10. Yii2的邮件配置

    'components' => [ 'mailer' => [ 'class' => 'yii\swiftmailer\Mailer', 'useFileTransport' =&g ...