2016-02-13 9 views
6

में लेबल को फीका या बाहर कैसे बनाया जाए, मैं viewDidLoad() में एक लेबल फीका बनाने के लिए देख रहा हूं, और उसके बाद टाइमर 3 फीड आउट हो गया है। मैं fadein या fadeout फ़ंक्शंस से परिचित नहीं हूं।स्विफ्ट

मैं यह करने के बारे में कैसे जाउंगा?

उत्तर

6

भले ही दृश्य लोड हो गया है, यह उपयोगकर्ता को दिखाई नहीं दे सकता है जब viewDidLoad कहा जाता है। इसका मतलब यह है कि आपको लगता है कि जब आप इसे देखते हैं तो आपके एनिमेशन पहले ही शुरू हो चुके हैं। इस समस्या को दूर करने के लिए, आप इसके बजाय viewDidAppear में अपनी एनीमेशन शुरू करना चाहेंगे।

fadeIn और fadeOut कार्यों के लिए - वे मौजूद नहीं हैं। आपको उन्हें खुद लिखना होगा। शुक्र है, यह करना बहुत आसान है। नीचे की तरह कुछ अच्छा हो सकता है।

func fadeViewInThenOut(view : UIView, delay: NSTimeInterval) { 

    let animationDuration = 0.25 

    // Fade in the view 
    UIView.animateWithDuration(animationDuration, animations: {() -> Void in 
     view.alpha = 1 
     }) { (Bool) -> Void in 

      // After the animation completes, fade out the view after a delay 

      UIView.animateWithDuration(animationDuration, delay: delay, options: .CurveEaseInOut, animations: {() -> Void in 
       view.alpha = 0 
       }, 
       completion: nil) 
    } 
} 
14

मेरा सुझाव कोड को थोड़ा अधिक मॉड्यूलर और उपयोग करने में आसान बनाने के लिए स्विफ्ट एक्सटेंशन का लाभ उठाना है। उदाहरण के लिए, यदि आप कई लेबलों पर फीडिन/आउट या एक लेबल को फीड इन/आउट करने के लिए बनाना चाहते हैं, तो आपको हर जगह एनिमेट विथडिशन विधियों को पास करना होगा, जो परेशानी हो सकती है। एक क्लीनर विकल्प UIView.swift (हमारे UIView एक्सटेंशन) नामक फ़ाइल बनाने के लिए है। इस फ़ाइल में निम्न कोड जोड़ें:

import Foundation 

extension UIView { 


func fadeIn(duration: NSTimeInterval = 1.0, delay: NSTimeInterval = 0.0, completion: ((Bool) -> Void) = {(finished: Bool) -> Void in}) { 
    UIView.animateWithDuration(duration, delay: delay, options: UIViewAnimationOptions.CurveEaseIn, animations: { 
     self.alpha = 1.0 
     }, completion: completion) } 

func fadeOut(duration: NSTimeInterval = 1.0, delay: NSTimeInterval = 3.0, completion: (Bool) -> Void = {(finished: Bool) -> Void in}) { 
    UIView.animateWithDuration(duration, delay: delay, options: UIViewAnimationOptions.CurveEaseIn, animations: { 
     self.alpha = 0.0 
     }, completion: completion) 
} 

} 

अब आप UIView (जैसे, UILabel, UIImage, आदि) के किसी भी बच्चे को fadein/fadeout कार्यक्षमता जोड़ सकते हैं। अपने viewDidLoad() फ़ंक्शन के अंदर, आप जोड़ सकते हैं:

self.statusLabel.alpha = 0 
self.statusLabel.text = "Sample Text Here" 
self.myLabel.fadeIn(completion: { 
     (finished: Bool) -> Void in 
     self.myLabel.fadeOut() 
     }) 

अब, आप, छवि दृश्य, लेबल, पाठ विचारों के लिए इस नमूना कोड का उपयोग कर सकते दृश्य, या UIView के किसी भी बच्चे के साथ-साथ स्क्रॉल करें। आशा है कि ये आपकी मदद करेगा।

+0

यह होना चाहिए सही उत्तर। बहुत साफ और अमूर्त दूर। धन्यवाद। – user3286381

+0

यह इस समस्या का एक शानदार संकल्प है। –

+0

यह बहुत अच्छा लग रहा है! धन्यवाद। एफवाईआई "समापन" पैरामीटर को @ एस्केपिंग क्लोजर की आवश्यकता है। – adamcee

4

अद्यतन स्विफ्ट 3.1 - @Andy कोड पर

func fadeViewInThenOut(view : UIView, delay: TimeInterval) { 
     let animationDuration = 0.25 

     // Fade in the view 
     UIView.animate(withDuration: animationDuration, animations: {() -> Void in 
      view.alpha = 1 
     }) { (Bool) -> Void in 

      // After the animation completes, fade out the view after a delay 

      UIView.animate(withDuration: animationDuration, delay: delay, options: [.curveEaseOut], animations: {() -> Void in 
       view.alpha = 0 
      }, completion: nil) 
     } 
    } 
+0

संपादन बटन एक कारण के लिए है। सिर्फ वाक्यविन्यास को संशोधित करने के लिए उत्तर देने से कॉपी करना अच्छा नहीं है। – Fogmeister

4

उत्तर स्विफ्ट 3 के लिए अद्यतन - का उपयोग करते हुए विस्तार

extension UIView { 
    func fadeIn(duration: TimeInterval = 1.0, delay: TimeInterval = 0.0, completion: @escaping ((Bool) -> Void) = {(finished: Bool) -> Void in}) { 
     UIView.animate(withDuration: duration, delay: delay, options: UIViewAnimationOptions.curveEaseIn, animations: { 
      self.alpha = 1.0 
     }, completion: completion) 
    } 

    func fadeOut(duration: TimeInterval = 1.0, delay: TimeInterval = 3.0, completion: @escaping (Bool) -> Void = {(finished: Bool) -> Void in}) { 
     UIView.animate(withDuration: duration, delay: delay, options: UIViewAnimationOptions.curveEaseIn, animations: { 
      self.alpha = 0.0 
     }, completion: completion) 
    } 
} 

उपयोग:

self.statusLabel.alpha = 0 
self.statusLabel.text = "Sample Text Here" 
self.myLabel.fadeIn(completion: { 
     (finished: Bool) -> Void in 
     self.myLabel.fadeOut() 
     })