7

我试图在我的应用程序中实现一种截屏方式。我希望 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];

问候

4

3 回答 3

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 *
     ***********************/
});    
于 2013-09-29T15:48:19.893 回答
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 ];
}
于 2013-09-29T15:42:35.337 回答
0

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

[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];

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

于 2013-09-29T15:42:57.150 回答