Разница между [UIView beginAnimations: context:] и [UIView animateWithDuration: animations:] - PullRequest
12 голосов
/ 09 октября 2010

Мне кажется, что эти два метода класса не являются взаимозаменяемыми.У меня есть подпредставление UIView со следующим кодом в методе touchesBegan:

if (!highlightView) {
    UIImageView *tempImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Highlight"]];
    self.highlightView = tempImageView;
    [tempImageView release];

    [self addSubview:highlightView];
}

highlightView.alpha = 0.0;

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.5];
highlightView.alpha = 1.0;
[UIView commitAnimations];

Когда я касаюсь кнопки, подсветка исчезает, как и следовало ожидать.Когда я подправляю немедленно (до окончания анимации), вызывается мой touchesEnded.Это поведение, которое я хочу.

Но теперь я стал большим поклонником блоков и стараюсь использовать их везде, где это возможно.Таким образом, я заменил код анимации UIView следующим:

[UIView animateWithDuration:0.2 animations:^{
    highlightView.alpha = 1.0;
}];

Результаты: выделение по-прежнему затухает, как и ожидалось, но если я коснусь до анимации закончится, мои прикосновения закругляются не позвонить.Если я подправлю после того, как анимация будет завершена, мои прикосновения закругляются , и будет вызван .Что здесь происходит?

Ответы [ 2 ]

14 голосов
/ 10 октября 2010

Новые блоки анимации в iOS 4 по умолчанию отключают взаимодействие с пользователем.Вы можете передать опцию, позволяющую представлениям реагировать на прикосновения во время анимации, используя битовые флаги в сочетании с методом animateWithDuration:delay:options:animations:completion для UIView, например:

UIViewAnimationOptions options = UIViewAnimationOptionCurveLinear | UIViewAnimationOptionAllowUserInteraction;

[UIView animateWithDuration:0.2 delay:0.0 options:options animations:^
{
    highlightView.alpha = 1.0;
} completion:nil];

Документация

3 голосов
/ 21 августа 2012

Еще одна вещь состоит в том, что Appple не рекомендует использовать [UIView beginAnimations: context:], вы можете найти его в beginAnimations документах

Использование этогометод не рекомендуется в iOS 4.0 и позже.Вместо этого вы должны использовать методы анимации на основе блоков, чтобы указать свои анимации.

Вероятно, Apple может пометить старые методы как устаревшие в будущих выпусках и не будет их поддерживать, поэтому использование методов на основе блоковдействительно более предпочтительный способ выполнения анимации.

...