【问题标题】:Halting In Progress CAKeyframeAnimation停止进行中 CAKeyframeAnimation
【发布时间】:2009-02-11 15:52:41
【问题描述】:

我正在使用视图的 CALayer 上的 CAKeyframeAnimation 为 UIView 的 frame 属性设置动画,并为“position”属性设置动画。当用户点击屏幕时,我希望能够在当前状态下停止动画,但我无法这样做。

我可以通过调用很容易地停止动画

[view.layer removeAnimationForKey:kFrameAnimationKey];

问题是视图的框架和图层的位置都没有直接由动画更新。如果我在动画开始和结束时查看位置属性

- (void)animationDidStop:(CAAnimation *)animation finished:(BOOL)finished

它没有改变。

似乎您需要在动画停止时明确执行此操作。但是如果动画在某个任意点停止,你不知道它走了多远。所以问题是如何让动画在运行时更新图层的位置属性,或者如何知道动画在停止时已经走了多远。

【问题讨论】:

    标签: iphone cocoa core-animation


    【解决方案1】:

    您可以通过抓取动画 UIView 层的presentationLayer 来实现动画的暂停,然后在移除动画之前将其帧应用到您的 UIView。例如:

    movingView.frame = [[movingView.layer presentationLayer] frame];
    [movingView.layer removeAnimationForKey:@"movementAnimation"];
    

    这似乎将 UIView 冻结在您正在寻找的当前动画位置。

    【讨论】:

    • 感谢您的回答!看来这里的关键是了解 CALayer 的表示层到底是什么。我不确定他们是否能很好地解释这一点。我仍然不确定模型层是什么。
    • “核心动画编程指南”中的“核心动画渲染架构”部分确实有一个很好的概念图。基本上,模型层是您通常设置的值,而表示层是反映层瞬时状态的只读副本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-23
    • 2016-01-03
    • 1970-01-01
    • 2018-09-26
    • 2020-01-12
    相关资源
    最近更新 更多