#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. что вы имеете в виду, пытаясь обновить его во время анимации?