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 ...
随机推荐
- [HTML/HTML5]2 CSS样式表设置
2.1 在HTML文件中设置样式表 当前HTML"规则"指出:HTML仅用于标识页面的内容,应该使用样式表来定义内容的呈现样式.这不仅使Web页面对于所有用户(无论采用什么浏览器 ...
- 解决Gradle生成Eclipse支持后,发布到Tomcat丢失依赖jar包的问题
最近一个项目中,使用号称下一代构建工具的Gradle构建项目. 使用中发现一个问题,Gradle从中央库下载的jar文件在系统的其它目录,使用gradle eclipse添加Eclipse支持时,ja ...
- Selenium VS QTP
Selenium系列 QTP 适用结构 B/S结构 C/S.B/S结构 适用人员 有一定代码基础(Java.C#.Python.Ruby) 对编程不是很熟悉的.厌烦了做手工功能测试的.想快速进 ...
- jquery multiselect使用示例
多选下拉框开源组件:https://github.com/ehynds/jquery-ui-multiselect-widget html部分: <select multiple id=&quo ...
- visio个人专注
字体颜色 1 填充 2 标注 3 箭头 4 线条 5 粗细 6
- jrebel注意事项
-Xms2048m -Xmx2048m -XX:MaxPermSize=4096m -noverify -javaagent:C:\Users\Administrator\.IntelliJIdea2 ...
- MySql学习(四) —— 函数、视图
注:该MySql系列博客仅为个人学习笔记. 本篇博客主要涉及MySql 函数(数学函数.字符串函数.日期时间函数.流程控制函数等),视图. 一.函数 1. 数学函数 对于数学函数,若发生错误,所有数学 ...
- qt越来越好了
qml中所有的商业控件都开源了,详见: import QtQuick.Extras 1.4 以前自己实现的时候实现了半天.
- 一个比较通用的makefile
.PHONY : all clean DEBUG := YES CC := gcc CXX := g++ LD := g++ AR := ar rc HOME_PATH := $(realpath . ...
- JAVA中的类和接口
1.类: 类是具有相同属性和方法的一组对象的集合,它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和方法两个主要部分.在面向对象的编程语言中,类是一个独立的程序单位,它应该有一个类名并包括属 ...