我已经看到了,这是一个附加的。
我不能让它正常工作。我有一个动画,我想释放它在动画结束后运行的控制器。
示例:控制器从右->左转换,然后释放自身。
定义动画:

NSValue *end = [NSValue valueWithCGPoint:CGPointMake(800, self.view.center.y)];
NSValue *start = [NSValue valueWithCGPoint:self.view.center];

CABasicAnimation *moveAnimation;
moveAnimation = [CABasicAnimation animationWithKeyPath:@"position"];
moveAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
moveAnimation.duration = 0.45f;

moveAnimation.fromValue = start;
moveAnimation.toValue = end;

// actually set the position
[self.view.layer setPosition:[end CGPointValue]];

moveAnimation.delegate = self;
moveAnimation.removedOnCompletion = NO;
[self.view.layer addAnimation:moveAnimation forKey:MOVING_OUT];

在委托方法内部:
- (void) animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag
{
    CAAnimation *check = [self.view.layer animationForKey:MOVING_OUT];

    if (theAnimation == check)
    {
        //[check release];
        [self release];

    }
}

如果我保持这段代码不变,我的控制器就不会被释放(由于动画的retain调用)。
如果我运行[check release],就会得到message sent to deallocated instance
有人知道怎么了吗?
是否有另一种方法来标识animationDidStop委托中的caanimation而不指定removedOnCompletion = NO
编辑:
忘了提。如果不指定removedOnCompletion = NOanimationForKey:将返回空值。因此我无法识别动画。
谢谢!

最佳答案

目前尚不清楚您的问题所在,但它可能有助于您了解CAAnimation实例是通用kvo容器,因此您可以向它们添加自定义信息:

[myAnimation setValue: @"check" forKey: @"name"];

然后您可以检查:
if ([[theAnimation valueForKey: @"name"] isEqual: @"check"])
    // ...

有帮助吗?

10-06 16:06