完成一组动画后切换到不同的视图

时间:2013-08-16 14:51:31

标签: ios performselector

我有一组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];
}

但是当我按下第一个按钮时,它只是断开而不会在调试器中留下任何东西。我该如何解决这个问题,或至少发现出了什么问题?

2 个答案:

答案 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];
}];