Взаимодействие с пользователем на анимированной UIButton - PullRequest
4 голосов
/ 25 октября 2011

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

    [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 место, и я могу нажать на него, даже если он еще не полностью анимирован.

Ответы [ 2 ]

6 голосов
/ 31 октября 2011

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

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

CGPoint animatingViewPosition = [(CALayer*)[animatingView.layer presentationLayer] position];
1 голос
/ 25 октября 2011

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

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];
...