CABasicAnimation的delegate的坑
博客已经迁移到 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的坑的更多相关文章
- 反爬虫:利用ASP.NET MVC的Filter和缓存(入坑出坑) C#中缓存的使用 C#操作redis WPF 控件库——可拖动选项卡的TabControl 【Bootstrap系列】详解Bootstrap-table AutoFac event 和delegate的分别 常见的异步方式async 和 await C# Task用法 c#源码的执行过程
反爬虫:利用ASP.NET MVC的Filter和缓存(入坑出坑) 背景介绍: 为了平衡社区成员的贡献和索取,一起帮引入了帮帮币.当用户积分(帮帮点)达到一定数额之后,就会“掉落”一定数量的“帮帮 ...
- CABasicAnimation使用总结
CABasicAnimation使用总结 实例化 使用方法animationWithKeyPath:对 CABasicAnimation进行实例化,并指定Layer的属性作为关键路径进行注册. //围 ...
- C# 闭包问题-你被”坑“过吗?
引言 闭包是什么?以前看面试题的时候才发现这个名词. 闭包在实际项目中会有什么问题?现在就让我们一起来看下这个不太熟悉的名词. 如果在实际工作中用到了匿名函数和lamada表达式,那你就应该高度注意啦 ...
- iOS delegate
有两个scene,分别为Scene A和Scene B.Scene A上有一个UIButton(Button A)和一个UILable(Lable A):Scene B上有一个UITextFiled( ...
- 基本动画CABasicAnimation - 完成之后闪回初始状态
基本动画CABasicAnimation 结束之后,默认闪回初始状态,那怎么解决呢? position需要设备两个属性: // MARK: - 结束后不要闪回去 anim.removedOnCompl ...
- CABasicAnimation的基本使用方法(移动·旋转·放大·缩小)
出处:http://blog.csdn.net/iosevanhuang/article/details/14488239 CABasicAnimation类的使用方式就是基本的关键帧动画. 所谓关键 ...
- 之一:CABasicAnimation - 基本动画
嗷呜嗷呜嗷呜 // 将视图作为属性方便后面执行多个不同动画 _myView = [[UIView alloc] init]; _myView.layer.position = CGPointMake( ...
- CABasicAnimation animationWithKeyPath 一些规定的值
CABasicAnimation animationWithKeyPath Types When using the ‘CABasicAnimation’ from the QuartzCore Fr ...
- 动画 CABasicAnimation animationWithKeyPath 一些规定的值
CABasicAnimation animationWithKeyPath Types When using the ‘CABasicAnimation’ from the QuartzCore Fr ...
随机推荐
- JAVA08多态之课程问题解决
课后作业一:接口多态:使用接口代替抽象基类 1.源代码: package zoo4; import java.util.Vector; public class Zoo2 { public stati ...
- Dedecms有效防止采集的两个实用办法
现在的采集真是无处不在,尤其是对一些原创性站点,真是烦透了这些采集的人们,如何预防和防止采集呢,站长们!今天先说一下dedecms防采集的办法. 1.随机模版 方法:你多复制N多模版,在body标记附 ...
- angularJS 2.0 开发的简单dome
与其说这是一个demo,不如说是一个与高手的讨教过程.虽然demo出来了,可其中有些问题我还是不太明白,如果有angularjs2.0的大神,请进来指导一番,~~~~~不甚感激. 说明第一点:我采用的 ...
- 关于tomcat内路径跳转的一些思考
初学jsp+servlet时经常碰上的几个错误:404.路径正确但页面没有任何内容.样式和图片丢失. 这几个错误曾经让我在debug时头大,现在总结一下,其实它们都跟路径有关,正是因为没有处理好路径跳 ...
- Linux mount的使用
大家在使用Linux系统的时候,肯定用过一些共享文件的东西,比如FTP,Mount 等等,接下来我重点说一下Mount的用法: 现在有一台测试环境上面需要部署Mount服务器(10.10.10.27) ...
- iOS:didSelectRowAtIndexPath:方法失效解决办法
问题描述及解决过程: 为了达到点击TableView空白区退出键盘的效果,给控制器注册了一个UITapGestureRecognizer来识别点击事件,代码如下: #pragma mark - 设置手 ...
- split 分割 字符串(分隔符如:* ^ : | , .) 及注意点
http://blog.sina.com.cn/s/blog_b6487d470101g0hp.html [1]单个符号作为分隔符 String address="上海|上海 ...
- pandas筛选0,3,6开头的行
http://stackoverflow.com/questions/15325182/how-to-filter-rows-in-pandas-by-regex dbstk.loc[dbstk.ST ...
- navicat 创建的表,username字段不能接受中文名字。
用navicat 创建的表,username(varchar)字段不能接受中文名字. 解决方法如下: 选中所创建的users表,打开“设计表”,选中username字段,看到下面是字符集latin1, ...
- js中setTimeout()时间参数设置为0的探讨
起因源于一道前端笔试题: var fuc = [1,2,3]; for(var i in fuc){ setTimeout(function(){console.log(fuc[i])},0); co ...