Если вторая анимация запускается до завершения первой анимации, TrofeoView
будет переназначена, и вы потеряете предыдущую ссылку. Вы также игнорируете правила управления памятью, когда выпускаете TrofeoView
в методе 'trofeiLaunch: `. Вы используете эту переменную позже, получив право собственности. Вы должны освобождать объект только в том случае, если с ним покончено.
Я думаю, что самая важная вещь на этом пути - убедиться, что три метода ссылаются на правильный объект. Первый по умолчанию в порядке, поэтому вам нужно обработать следующие два. Я изменил ваш код, чтобы сделать это.
- (IBAction)start {
animatingView = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 200, 200)];
animatingView.backgroundColor = [UIColor greenColor];
animatingView.alpha = 0.0;
[UIView beginAnimations:@"Trophy Display" context:animatingView];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
[UIView setAnimationDuration:0.5];
[UIImageView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
animatingView.alpha = 1.0;
[UIView commitAnimations];
[self.window addSubview:animatingView];
}
- (void)animationDidStop:(NSString*)animationID finished:(NSNumber*)finished context:(void *)context {
if ( [animationID isEqualToString:@"Trophy Display"] ) {
UIView *aView = (UIView *)context;
[UIView beginAnimations:nil context:aView];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
[UIView setAnimationDuration:0.5];
[UIView setAnimationDelegate:self];
aView.alpha = 0.0;
[UIView commitAnimations];
[self performSelector:@selector(finishAnimation:) withObject:aView afterDelay:1.0];
}
}
- (void)finishAnimation:(UIView*)aView {
[aView removeFromSuperview];
[aView release];
}
Я передаю представление через context
второму методу и withObject:
часть третьему методу. Я надеюсь, что код говорит сам за себя. Дайте мне знать, если вы этого не получите.
Следующий пункт касается того, является ли это правильным путем. Вы не можете управлять этим с помощью массива? Нажмите только, если на дисплее нет изображения.