Взаимодействие пользователя с анимированным UIButton

#objective-c #ios #cocoa-touch #uibutton #uiviewanimation

#objective-c #iOS #cocoa-touch #uibutton #uiviewanimation

Вопрос:

Я пытаюсь создать небольшое приложение в Xcode 4.2, предназначенное для iPhone. То, что я хочу, — UIButton это анимация вниз по экрану, и когда вы нажимаете на нее, вы устанавливаете для нее значение alpha равным 0. Я нашел метод из UIView класса, который мог обрабатывать взаимодействия с пользователем, и пришел к этому коду:

     [UIView animateWithDuration:3.0 
                      delay:0
                    options: UIViewAnimationOptionAllowUserInteraction | UIViewAnimationOptionAllowAnimatedContent
                 animations: ^{ CGRect myRect = enemy1.frame;
                     myRect.origin.y = 300;
                     myButton.frame = myRect;
                 }
                 completion:nil];
  

Теперь это выполняет анимацию должным образом, но дело в том, что он мгновенно устанавливает значение origin.y 300, что означает, что я не могу нажать кнопку «когда она скользит вниз». Я могу нажать его только в этом origin.y местоположении 300, и я могу нажать его, даже если он еще не анимирован полностью.

Ответ №1:

События касания не работают корректно в iOS во время анимации представления. Вы можете касаться views, когда он находится в исходном местоположении, или касаться views, когда он находится в целевом местоположении, но события касания не будут запускаться корректно для положения, в котором находится view во время его анимации.

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

 CGPoint animatingViewPosition = [(CALayer*)[animatingView.layer presentationLayer] position];
  

Ответ №2:

Вы можете использовать,

 button.frame = CGRectMake(100, 100, 60, 40);
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:4.0];
button.frame = CGRectMake(100, 300, 60, 40);    
[UIView commitAnimations];
  

Комментарии:

1. Это не решает проблему — результат тот же. Проблема в том, что рамка кнопки не обновляется, вы можете попытаться обновить ее во время анимации.

2. Спасибо за попытку помочь, но приведенный выше код не помог, как указал alhcr. что вы имеете в виду, пытаясь обновить его во время анимации?