无法禁用CALayer>> removeFromSuperlayer的动画

时间:2010-06-28 15:03:47

标签: iphone uikit core-animation calayer

我希望在没有动画的情况下从其超级层移除CALayer。这里发生的是层动画到位置,效果很好,但是当动画停止时,执行此代码,将图层返回到其起始位置,并淡出;据推测,然后从超级层移除。如何从动画-removeFromSuperlayer中停止?此处列出的代码对所包含的注释的所有变体具有相同的行为,这些变体是未注释的,未取消注释,Transaction或无事务。我错过了什么?

- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag
{
    //[self setHidden: YES];

    //[CATransaction flush];
    [CATransaction begin];
    [CATransaction setValue:(id)kCFBooleanTrue
                     forKey:kCATransactionDisableActions];
    //[CATransaction setDisableActions: YES];
    //[CATransaction setAnimationDuration: 0];
    [self removeFromSuperlayer];
    [CATransaction commit];
}

我一直在寻找,这段代码与我找到的没有任何不同。

1 个答案:

答案 0 :(得分:3)

您可以通过在超级图层上设置操作字典来禁用隐式动画,以便为涉及子图层的动画返回null(类似于我的回答here):

NSMutableDictionary *newActions = [[NSMutableDictionary alloc] initWithObjectsAndKeys:[NSNull null], @"sublayers", nil];
superlayer.actions = newActions;
[newActions release];

您可能还需要覆盖图层(而不是超级图层)onOrderOut操作以防止这种情况发生。我将在链接的答案中展示如何做到这一点。