【问题标题】:CATransaction complete block success or failureCATransaction 完成块成功或失败
【发布时间】:2014-05-23 21:45:13
【问题描述】:

我正在使用 CATransaction 处理 Core Animation。我使用setCompletionBlock 来捕捉动画何时完成,以便我可以处理视图控制器中的数据,但我希望动画是可中断的。例如。当我打电话时

[self.layer removeAllAnimations]

动画应该停止,但是 setCompletionBlock 也应该知道如果动画成功或失败。

对于 UIView 动画,这是可能的,因为在完成块中传递了一个 finished 变量,而对于 CAAnimationGroup,这也可能是通过传递给委托的 finished 变量。我如何使用CATransaction 完成相同的操作?

【问题讨论】:

    标签: ios objective-c uiview core-animation


    【解决方案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 通用的协议声明,它赋予它添加新键/值对的能力。最后我设法错过了这一点。
    猜你喜欢
    • 2015-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-16
    • 2014-07-14
    • 1970-01-01
    • 1970-01-01
    • 2018-07-07
    相关资源
    最近更新 更多