我有一组UIButton的视图。当按下一个按钮时,我希望其余按钮从屏幕上翻译,然后将视图控制器更改为新视图。我的两种方法是:
-(IBAction)button1 {
[UIView beginAnimations: nil context: nil];
[UIVeiw setAnimationDuration:0.5];
[UIView setAnimationCurve:UIVewAnimationCurveEaseIn];
button2.transform = CGAffineTransforMakeTranslation(0, 520);
[UIView commitAnimations];
[self performSelector:@selector(switchtoview2) withObject:self afterdelay:0.6];
}
-(void)switchtoview2 {
View2ViewController *view2 = [[View2ViewController alloc] initWithNibName:nil bundle: nil];
view2.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:view2 animated:YES];
}
但是当我按下第一个按钮时,它只是断开而不会在调试器中留下任何东西。我该如何解决这个问题,或至少发现出了什么问题?
答案 0 :(得分:3)
您应该使用较新的块方法。它们具有内置的完成块,一旦动画完成就会执行。
编辑: 对于您的情况,请使用您可以选择使用该animationCurve的那个:
[UIView animateWithDuration:0.5
delay:0.0
options:UIViewAnimationOptionCurveEaseIn
animations:^{
button2.transform = CGAffineTransforMakeTranslation(0, 520);
} completion:^(BOOL finished) {
[self switchtoview2];
}];
答案 1 :(得分:1)
从iOS 4开始,你应该使用更新的基于块的UIView动画,你知道这个动画内置了完成块!它们更容易使用,考虑到Xcode的代码完成将为您生成大部分内容。只需将动画完成时想要发生的代码添加到底部的完成块即可。
[UIView animateWithDuration:2.0 animations:^{
button2.transform = CGAffineTransforMakeTranslation(0, 520);
} completion:^(BOOL finished) {
View2ViewController *view2 = [[View2ViewController alloc] initWithNibName:nil bundle: nil];
view2.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:view2 animated:YES];
}];