Мне кажется, что эти два метода класса не являются взаимозаменяемыми. У меня есть подвид UIView со следующим кодом в методе touchhesBegan:
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];
Когда я касаюсь кнопки, подсветка исчезает, как и следовало ожидать. Когда я сразу прикоснусь (пока анимация не закончится), мои touchhesEnded вызывают. Это поведение, которое я хочу.
Но теперь я стал большим поклонником блоков и стараюсь использовать их там, где это возможно. Поэтому я заменил код анимации UIView следующим образом:
[UIView animateWithDuration:0.2 animations:^{
highlightView.alpha = 1.0;
}];
Результаты: подсветка по-прежнему исчезает, как и ожидалось, но если я дотронусь до завершения анимации, мои touchhesEnded не будут вызваны. Если я коснусь после завершения анимации, мои вызовы touchesEnded получат вызов. Что здесь происходит?