Итак, у меня проблема с кнопками и анимацией. По сути, я анимирую вид с помощью анимации UIView, а также пытаюсь прослушать нажатия на кнопку внутри вида. Представление такое же большое, как кнопка, и оно фактически является подклассом UIImageView с изображением под кнопкой. Представление является вложенным представлением контейнера, размещенным в Интерфейсном Разработчике с включенным взаимодействием с пользователем и включенным отсечением. Вся анимация и обработка кнопок выполняется в этом подклассе UIImageView, в то время как сообщение startFloating
отправляется из отдельного класса по мере необходимости.
Если я не выполняю анимацию, сообщение buttonTapped:
отправляется правильно, но во время анимации оно не отправляется. Я также пытался реализовать метод touchesEnded
, и происходит то же поведение.
Инициализация подкласса UIImageView (у меня есть кнопка, заполненная цветом, чтобы я мог видеть, что рамка правильно настроена, что она делает):
- (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];
}
Итак, чтобы быть ясным:
- Использование анимации UIView эффективно отключает кнопку.
- Отключение анимации приводит к срабатыванию кнопки.
- Кнопка имеет правильный размер и расположена на экране, и перемещается вместе с представлением правильно.