Таким образом, у меня есть проблема с кнопками и анимациями. В основном я анимирую представление с помощью анимаций UIView, также пытаясь прислушаться к касаниям на кнопке в представлении. Представление является столь же большим как кнопка, и представление является на самом деле подклассом UIImageView с изображением ниже кнопки. Представление является подпредставлением контейнерного представления, помещенного в Интерфейсного Разработчика с включенным взаимодействием с пользователем и включенное отсечение. Вся обработка анимации и кнопки сделана в этом подклассе UIImageView, в то время как startFloating
сообщение отправляется от отдельного класса по мере необходимости.
Если я не делаю никакой анимации, buttonTapped:
сообщение отправляется правильно, но во время анимации это не становится отправленным. Я также попытался реализовать touchesEnded
метод и то же поведение происходят.
UIImageView разделяют init на подклассы (мне заполнили кнопку цветом, таким образом, я вижу, что кадр установлен правильно, который это делает):
- (id)initWithImage:(UIImage *)image {
self = [super initWithImage:image];
if (self != nil) {
// ...stuffs
UIButton *tapBtn = [UIButton buttonWithType:UIButtonTypeCustom];
tapBtn.frame = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
[tapBtn addTarget:self action:@selector(buttonTapped:) forControlEvents:UIControlEventTouchUpInside];
tapBtn.backgroundColor = [UIColor cyanColor];
[self addSubview:tapBtn];
self.userInteractionEnabled = YES;
}
return self;
}
Метод анимации, который запускает анимацию (если я не называю это, кнопка работает правильно):
- (void)startFloating {
[UIView beginAnimations:@"floating" context:nil];
[UIView setAnimationDelegate:self];
[UIView setAnimationCurve:UIViewAnimationCurveLinear];
[UIView setAnimationDuration:10.0f];
self.frame = CGRectMake(self.frame.origin.x, -self.frame.size.height, self.frame.size.width, self.frame.size.height);
[UIView commitAnimations];
}
Так, чтобы быть ясным:
Анимация - это просто конфета для глаз. Анимация отстает от фактического движения представления. Кнопка уже находится в точке назначения при запуске анимации. Вы просто видите, как движется фильм с видом/кнопкой.
Если вы хотите, чтобы кнопка была кликабельной во время анимации, вам придется сделать анимацию самостоятельно.