0

我有一组 UIButtons 的视图。当按下一个按钮时,我希望其余的从屏幕上移开,然后将视图控制器更改为新视图。我的两种方法是:

-(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];
}

但是当我按下第一个按钮时,它只是中断而没有在调试器中留下任何东西。我该如何解决这个问题,或者至少检测出哪里出了问题?

4

2 回答 2

3

您应该使用较新的块方法。它们有内置的完成块,一旦动画完成就会执行。

编辑:对于您的情况,请使用您可以提供使用该动画曲线的选项:

    [UIView animateWithDuration:0.5
                      delay:0.0
                    options:UIViewAnimationOptionCurveEaseIn
                 animations:^{
                     button2.transform = CGAffineTransforMakeTranslation(0, 520);
                 } completion:^(BOOL finished) {
                     [self switchtoview2];
                 }];
于 2013-08-16T14:54:43.350 回答
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];
}];
于 2013-08-16T14:55:01.660 回答