我希望在没有动画的情况下从其超级层移除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];
}
我一直在寻找,这段代码与我找到的没有任何不同。
答案 0 :(得分:3)
您可以通过在超级图层上设置操作字典来禁用隐式动画,以便为涉及子图层的动画返回null(类似于我的回答here):
NSMutableDictionary *newActions = [[NSMutableDictionary alloc] initWithObjectsAndKeys:[NSNull null], @"sublayers", nil];
superlayer.actions = newActions;
[newActions release];
您可能还需要覆盖图层(而不是超级图层)onOrderOut操作以防止这种情况发生。我将在链接的答案中展示如何做到这一点。