I видел видел Как определить CAAnimation в делегате animationDidStop? , это дополнение к нему.
Я не могу заставить это работать должным образом,У меня есть анимация, и я хотел бы выпустить контроллер, в котором он был запущен после окончания анимации.Пример: контроллер переводит справа -> влево, затем освобождает себя.
Определение анимации:
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];
}
}
Если я уйдуэтот код как есть, мой контроллер не получает dealloc'd (из-за удержания вызова анимацией).Если я запускаю [check release]
, я получаю message sent to deallocated instance
.
Кто-нибудь знает, что не так?Есть ли другой способ идентифицировать CAAnimation в делегате animationDidStop
БЕЗ указания removedOnCompletion = NO
?
РЕДАКТИРОВАТЬ: Забыл упомянуть.Не указав, что removedOnCompletion = NO
, animationForKey:
вернет NULL.Поэтому я не могу определить анимацию.
Спасибо!