2013-09-29 14 views
7

Sto cercando di implementare un modo di fare uno screenshot nella mia applicazione. Voglio che il suggerimento di UINavigationBar scorri verso l'alto - prendi lo screenshot - e quindi UINavigationBar può scorrere verso il basso in modo facile e veloce. Ho bisogno l'applicazione di aspettare/tenere alcuni secondi tra alcune righe di codice, perché in questo modo la prima animazione non ottiene il tempo per finire:Fare in modo che l'app attenda alcuni secondi prima di eseguire il codice?

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

Quindi, c'è un modo di ritardare l'esecuzione, come quando l'animazione un pulsante mi piace così:

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

riguarda

risposta

3

È possibile utilizzare:

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

e, naturalmente:

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

Mentre non sembra essere un callback per setNavigationBarHidden s' di completamento, ci vorranno UINavigationControllerHideShowBarDuration secondi. Quindi, basta usare un NSTimer ritardarla:

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

si consiglia di aggiungere una piccola quantità per il ritardo come un fail-safe;

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

Vedi anche questa domanda correlata: UINavigationControoller - setNavigationBarHidden:animated: How to sync other animations

11

È possibile utilizzare:

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 * 
    ***********************/ 
});  
Problemi correlati