让应用程序在执行代码之前等待几秒钟?

时间:2013-09-29 15:39:31

标签: ios

我试图实现一种在我的应用程序中截取屏幕截图的方法。我希望UINavigationBar提示向上滑动 - 截取屏幕截图 - 然后UINavigationBar可以轻松下滑。我需要应用程序在某些代码行之间等待/保持几秒钟,因为这样第一个动画没有时间完成:

[self.navigationController setNavigationBarHidden:YES animated:YES ];
[self.navigationController setNavigationBarHidden:NO animated:YES];

那么,有没有一种延迟执行的方法,比如像动画这样的按钮:

[UIView animateWithDuration:0.5 delay:3 options:UIViewAnimationOptionCurveEaseOut animations:^{self.myButton.frame = someButtonFrane;} completion:nil];

问候

3 个答案:

答案 0 :(得分:11)

您可以使用:

double delayInSeconds = 2.0; // number of seconds to wait
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
    /***********************
     * Your code goes here *
     ***********************/
});    

答案 1 :(得分:3)

您可以使用:

[self performSelector:@selector(hideShowBarButton) withObject:nil afterDelay:1.0];

当然:

- (void) hideShowBarButton{
    if (self.navigationController.navigationBarHidden)
        [self.navigationController setNavigationBarHidden:NO animated:YES ];
    else
        [self.navigationController setNavigationBarHidden:YES animated:YES ];
}

答案 2 :(得分:0)

虽然setNavigationBarHidden的完成似乎没有回调,但需要UINavigationControllerHideShowBarDuration秒。所以只需使用NSTimer来延迟它:

[NSTimer scheduledTimerWithTimeInterval:UINavigationControllerHideShowBarDuration target:self selector:@selector(myFunction:) userInfo:nil repeats:NO];

您可能希望在延迟时添加一小部分作为故障保护;

[NSTimer scheduledTimerWithTimeInterval:UINavigationControllerHideShowBarDuration+0.05 target:self selector:@selector(myFunction:) userInfo:nil repeats:NO];

另请参阅此相关问题:UINavigationControoller - setNavigationBarHidden:animated: How to sync other animations