UIView Анимация на нескольких UIImageViews в ARC - PullRequest
0 голосов
/ 16 ноября 2011

В моем приложении есть анимация, которая увеличивает UIImageView, а затем сжимает его (на самом деле две анимации).Во всем приложении это может происходить на нескольких различных UIImageViews.Я нашел способ сделать это, который работал очень хорошо, но теперь он не совместим с автоматическим подсчетом ссылок.Вот мой код:

[UIView beginAnimations:@"growImage" context:imageName];
[UIView setAnimationDuration:0.5f];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
[UIView setAnimationDelegate:self];
imageName.transform = CGAffineTransformMakeScale(1.2, 1.2);
[UIView commitAnimations];

, а затем:

- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(UIImageView *)context {
    if (animationID == @"growImage") {
    [UIView beginAnimations:@"shrinkImage" context:context];
    [UIView setAnimationDuration:0.5f];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
    [UIView setAnimationDelegate:self];
    context.transform = CGAffineTransformMakeScale(0.01, 0.01);
    [UIView commitAnimations];
    }
}

Это работало отлично, и я был очень доволен этим, пока не попытался преобразовать свой проект в ARC.Теперь я получаю сообщение об ошибке «Неявное преобразование указателя Objective C в 'void *' запрещено ARC» в этих строках, в которых я пытаюсь передать UIImageView в качестве контекста для анимации:

[UIView beginAnimations:@"growImage" context:imageName];
[UIView beginAnimations:@"shrinkImage" context:context];

Кто-нибудь знает другой способ, которым я могу предупредить функцию animationDidStop, для которой UIImageView, с которой я хочу работать, будет совместим с ARC?

Заранее большое спасибо!

Ответы [ 2 ]

2 голосов
/ 16 ноября 2011

По какой причине вы не используете намного более простую блочную анимацию?

[UIView animateWithDuration:0.5 animation:^{
    imageName.transform = CGAffineTransformMakeScale(1.2, 1.2);
} completion ^(BOOL finished) {
    [UIView animateWithDuration:0.5 animation:^{
        imageName.transform = CGAffineTransformMakeScale(0.01, 0.01);
    }];
}];
1 голос
/ 17 ноября 2011

Вы можете сделать следующее:

[UIView beginAnimations:@"growImage"
                context:(__bridge void*)imageName];
imageName.transform = ...
[UIView commitAnimations];
...