CATransaction 完成块成功或失败
Posted
技术标签:
【中文标题】CATransaction 完成块成功或失败【英文标题】:CATransaction complete block success or failure 【发布时间】:2014-05-23 21:45:13 【问题描述】:我正在使用 CATransaction
处理 Core Animation。我使用setCompletionBlock
来捕捉动画何时完成,以便我可以处理视图控制器中的数据,但我希望动画是可中断的。例如。当我打电话时
[self.layer removeAllAnimations]
动画应该停止,但是 setCompletionBlock 也应该知道如果动画成功或失败。
对于 UIView 动画,这是可能的,因为在完成块中传递了一个 finished
变量,而对于 CAAnimationGroup,这也可能是通过传递给委托的 finished
变量。我如何使用CATransaction
完成相同的操作?
【问题讨论】:
【参考方案1】:使用键值编码,您可以将任何您喜欢的变量传递到当前事务中,以便稍后由完成块获取。 CATransaction、CAAnimation、CALayer,它们都接受任意键值对,您可以随心所欲地创建和使用它们。
https://developer.apple.com/library/ios/documentation/graphicsimaging/Reference/CATransaction_class/Introduction/Introduction.html#//apple_ref/occ/clm/CATransaction/setValue:forKey:
【讨论】:
我使用了将任意键/值对附加到 CAAnimation 对象和 CALayer 对象的技巧,效果很好。但是,CATransaction 只不过是类方法。我不知道与 CATransaction 的实例交互的方法,也不知道如何将键/值对附加到像 CATransaction 这样的类。你能解释一下吗? 不涉及实例;你说[CATransaction setValue:@YES forKey:@"cancelled"]
,稍后用if ([CATransaction valueForKey:@"cancelled"])
接听。你有没有看过我提供的文档链接?
是的,它似乎适用于嵌套的 CATransactions。简直糟透了,这是一个手动过程,您必须检查以确保子层的每个更改也被取消。虽然这是答案,但出于上述原因,我决定不使用它。 UIView 和 CAAnimationGroup 会为您跟踪它,所以我现在坚持使用它们,直到我不再使用它们为止。
我确实阅读了文档,但显然不够仔细。我想我记得 CALayer 和 CAAnimation 通用的协议声明,它赋予它添加新键/值对的能力。最后我设法错过了这一点。以上是关于CATransaction 完成块成功或失败的主要内容,如果未能解决你的问题,请参考以下文章
iOS 在调用完成块之前会在 viewDidDisappear 之后等待 CATransaction
将动画添加到子视图时立即调用 CATransaction 完成块
AFHTTPRequestOperation 不会调用成功或失败块的可能场景都有哪些?