2017-09-12 3 views
0

Problème:Fondu bouton quand ne pas toucher pendant 3 secondes et se fanent lorsque l'utilisateur touche l'écran

J'ai UIButton que je voudrais disparaître pendant quelques secondes lorsque l'utilisateur ne touche pas la écran et les fondu lorsque l'utilisateur touche l'écran. Je pense que je pourrais avoir besoin d'utiliser une minuterie et une animation dans la partie viewdidload

@IBOutlet var startStopButton: UIButton! 

@IBAction func startStopButtonTapped(_ sender: UIButton) { 

} 


override func viewDidLoad() { 
    super.viewDidLoad() } 

Répondre

0

Je peux vous aider ici. Permettez-moi de préface cette réponse avec un souci d'utilisabilité. Je ne suis pas sûr qu'il est logique de taper n'importe où sur l'écran pour réinitialiser (fondu) le bouton après X secondes (l'utilisateur sait-il faire cela?). Vous voudrez peut-être ajouter un bouton ou une sorte d'indicateur de texte pour "appuyer ici pour réinitialiser le (s) bouton (s)". Tout cela dépend finalement de votre application, mais juste jeter là-bas :)

Sur la réponse!

L'idée générale ici est que vous voulez avoir une minuterie qui exécute une méthode toutes les secondes. Si la minuterie atteint zéro, alors vous disparaissez et désactivez le bouton startStop. Si l'utilisateur tape n'importe où sur l'écran (via la fonction de reconnaissance de gestes sur l'ensemble de la vue), il suffit d'appuyer sur le bouton et de l'activer.

Maintenant pour la partie code!

class ViewController: UIViewController { 
// Create these 3 properties in the top of your class 
var secondToFadeOut = 5 // How many second do you want the view to idle before the button fades. You can change this to whatever you'd like. 
var timer = Timer() // Create the timer! 
var isTimerRunning: Bool = false // Need this to prevent multiple timers from running at the same time. 


@IBOutlet weak var startStopButton: UIButton! // The outlet for your button. This is used to fade it in and out, and enable/disable it. 

override func viewDidLoad() { 
    super.viewDidLoad() 
    startStopButton.isEnabled = true 
    runTimer() 

    // Add a tap gesture recognizer to the main view to determine when the screen was tapped (for the purpose of resetting the timer). 
    let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.tap(_:))) 
    self.view.addGestureRecognizer(tapRecognizer) 

} 

func runTimer() { 
    // Create the timer to run a method (in this case... updateTimer) every 1 second. 
    timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: (#selector(ViewController.updateTimer)), userInfo: nil, repeats: true) 
    // Set the isTimerRunning bool to true 
    isTimerRunning = true 
} 

@objc func updateTimer() { 
    // Every 1 second that this method runs, 1 second will be chopped off the secondToFadeOut property. If that hits 0 (< 1), then run the fadeOutButton and invalidate the timer so it stops running. 
    secondToFadeOut -= 1 
    print(secondToFadeOut) 
    if secondToFadeOut < 1 { 
     fadeOutButton() 
     timer.invalidate() 
     isTimerRunning = false 
    } 
} 

@objc func tap(_ gestureRecognizer: UITapGestureRecognizer) { 
    // When the view is tapped (based on the gesture recognizer), reset the secondToFadeOut property, fade in (and enable) the button. 
    //secondToFadeOut = 5 
    fadeInButton() 
    timer.invalidate() 
    //if isTimerRunning == false { 
    // runTimer() 
    //} 
} 

func fadeOutButton() { 
    // Fade out your button! I also disabled it here. But you can do whatever your little heart desires. 
    UIView.animate(withDuration: 0.5) { 
     self.startStopButton.alpha = 0.25 
    } 
    self.startStopButton.isEnabled = false 
} 
func fadeInButton() { 
    // Fade the button back in, and set it back to active (so it's tappable) 
    UIView.animate(withDuration: 0.5) { 
     self.startStopButton.alpha = 1 
    } 
    self.startStopButton.isEnabled = true 
} 


@IBAction func startStopButtonPressed(_ sender: UIButton) { 
    print("Start Stop Button Pressed") 
} 
} 

espoir qui fait sens, mais ne laissez-moi savoir si vous avez des questions!

+0

Merci beaucoup pour votre aide. Cela fonctionne bien, mais quand le startStopButton s'estompe, je ne peux pas sembler désactiver la minuterie parce qu'elle remonte à 0, puis s'éteint automatiquement. Comment puis-je désactiver cela? –

+0

Vous êtes les bienvenus pour l'aide! Vous avez raison, la minuterie continue de s'allumer jusqu'à ce que le bouton s'éteigne. Lorsque le bouton s'estompe de nouveau, il est automatiquement activé sur une autre minuterie de 5 secondes jusqu'à ce que l'écran soit appuyé. Je pensais que c'était le comportement que tu voulais. Qu'aimeriez-vous avoir? – Joe

+0

Merci, j'aimerais juste que la minuterie s'arrête et retourne à la normale, donc il n'y a pas de temporisateur de 5 secondes quand le startStopButton réapparaît. Au moment où il disparaît automatiquement, j'aimerais qu'il ne disparaisse pas quand il disparaît. –