2015-11-22 21 views
8

Desidero visualizzare un messaggio sullo schermo dopo che l'utente preme un pulsante. Quindi desidero che il messaggio scompaia dopo circa un secondo. Preferibilmente svanirebbe invece che scomparire.Come mostrare un messaggio sullo schermo per alcuni secondi?

Preferisco non bloccare l'interfaccia utente durante la visualizzazione del messaggio. In effetti, vorrei che il timer si riavvii per il messaggio se il pulsante viene premuto di nuovo. Non sono sicuro se utilizzare NSTimer, dispatch_after o se ci sono altre opzioni.

Attualmente sto pianificando di utilizzare un NSTimer e un'etichetta UI per raggiungere questo obiettivo, e vivrò semplicemente con una forte scomparsa. È il modo migliore per farlo?

MODIFICA: per chiarire, il messaggio non sarà necessariamente lo stesso ogni volta che viene premuto il pulsante. Non sono del tutto sicuro se questo è rilevante però.

+3

È possibile farlo con un'animationWithDuration e un gestore di completamento per ripristinare i valori di animazione. – mn1

+0

Si desidera qualcosa di simile a quel testo bianco su nero semitrasparente, istruzioni rette tonde che prima apparivano e svanivano quando ad es. Xcode è riuscito a costruire un progetto un paio di anni fa. O cosa fa l'app iOS Stack Exchange quando ascolti un commento, ecc.? –

+0

@NicolasMiari Mi piacerebbe che fosse molto simile ad un testo su una diapositiva di un powerpoint che appare sulla diapositiva esistente e poi svanisce dopo un secondo mentre la diapositiva rimane la stessa. L'unica differenza è che la mia "diapositiva" contiene un pulsante che causa l'aspetto del testo. – FlashDrive

risposta

3

sono stato in grado di realizzare ciò che volevo dopo la ricerca ciò che è stato suggerito nel commento di @ MN1. Ho usato animateWithDuration per sbiadire l'etichetta. Ecco qualche esempio di codice:

myLabel.hidden = false 
UIView.animateWithDuration(0.5, animations: {() -> Void in 
    self.myLabel.alpha = 0 
}) 
4

Questo mostra una visualizzazione di avviso sullo schermo e si chiude automaticamente dopo 1 secondo. È possibile impostare l'ora.

var alert:UIAlertController! 
    func showAlert() { 
     self.alert = UIAlertController(title: "Alert", message: "Wait Please!", preferredStyle: UIAlertControllerStyle.Alert) 
     self.presentViewController(self.alert, animated: true, completion: nil) 
     NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("dismissAlert"), userInfo: nil, repeats: false) 
    } 

    func dismissAlert(){ 
     // Dismiss the alert from here 
     self.alert.dismissViewControllerAnimated(true, completion: nil) 
    } 
+0

Un avviso potrebbe effettivamente coprire il pulsante e impedire l'interazione con l'intera app. Sto cercando un modo per mostrare solo del testo all'utente piuttosto che un allarme invadente. – FlashDrive

6

Swift 3 Soluzione:

// Define a view 
    var popup:UIView! 
    func showAlert() { 
    // customise your view 
    popup = UIView(frame: CGRect(x: 100, y: 200, width: 200, height: 200)) 
    popup.backgroundColor = UIColor.redColor 

    // show on screen 
    self.view.addSubview(popup) 

    // set the timer 
    Timer.scheduledTimer(timeInterval: 3.0, target: self, selector: #selector(self.dismissAlert), userInfo: nil, repeats: false) 
    } 

    func dismissAlert(){ 
    if popup != nil { // Dismiss the view from here 
     popup.removeFromSuperview() 
    } 
    } 

Swift 2 Soluzione:

// Define a view 
    var popup:UIView! 
    func showAlert() { 
    // customise your view 
    popup = UIView(frame: CGRect(x: 100, y: 200, width: 200, height: 200)) 
    popup.backgroundColor = UIColor.redColor() 

    // show on screen 
    self.view.addSubview(popup) 

    // set the timer 
    NSTimer.scheduledTimerWithTimeInterval(3.0, target: self, selector: Selector("dismissAlert"), userInfo: nil, repeats: false) 
    } 

    func dismissAlert(){ 
    // Dismiss the view from here 
    popup.removeFromSuperview() 
    } 

    // Don't forget to call showAlert() function in somewhere 
1

Questo codice è diventato più breve con iOS 10. Grazie alla @fatihyildizhan

fun showAlert() { 
    let alert = UIAlertController(title: "Alert", message: "Wait Please!", preferredStyle: .alert) 
    self.present(alert, animated: true, completion: nil) 
    Timer.scheduledTimer(withTimeInterval: 3.0, repeats: false, block: { _ in alert.dismiss(animated: true, completion: nil)}) 
} 
Problemi correlati