2014-11-12 6 views
14

में छवि संक्रमण एनीमेशन जोड़ना नीचे दिया गया कोड है जो स्वचालित रूप से विभिन्न छवियों, प्रत्येक 5 सेकंड के बीच संक्रमण करता है। मैं संक्रमणों में एनिमेशन जोड़ना चाहता हूं यानी, बाएं से स्क्रॉल करें, आदि। मैं स्विफ्ट में ऐसा करने के बारे में कैसे जाऊं? धन्यवाद।स्विफ्ट

class ViewController: UIViewController { 
@IBOutlet weak var imageView: UIImageView! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    imageView.animationImages = [ 
     UIImage(named: "brooklyn-bridge.jpg")!, 
     UIImage(named: "grand-central-terminal.jpg")!, 
     UIImage(named: "new-york-city.jpg")!, 
     UIImage(named: "one-world-trade-center.jpg")!, 
     UIImage(named: "rain.jpg")!, 
     UIImage(named: "wall-street.jpg")!] 

    imageView.animationDuration = 25.0 
    imageView.startAnimating() 
} 

उत्तर

32
class ViewController: UIViewController { 
     @IBOutlet weak var imageView: UIImageView! 

     let images = [ 
       UIImage(named: "brooklyn-bridge.jpg")!, 
       UIImage(named: "grand-central-terminal.jpg")!, 
       UIImage(named: "new-york-city.jpg"), 
       UIImage(named: "one-world-trade-center.jpg")!, 
       UIImage(named: "rain.jpg")!, 
       UIImage(named: "wall-street.jpg")!] 
     var index = 0 
     let animationDuration: NSTimeInterval = 0.25 
     let switchingInterval: NSTimeInterval = 3 

     override func viewDidLoad() { 
       super.viewDidLoad() 

       imageView.image = images[index++] 
       animateImageView() 
     } 

     func animateImageView() { 
       CATransaction.begin() 

       CATransaction.setAnimationDuration(animationDuration) 
       CATransaction.setCompletionBlock { 
         let delay = dispatch_time(DISPATCH_TIME_NOW, Int64(self.switchingInterval * NSTimeInterval(NSEC_PER_SEC))) 
         dispatch_after(delay, dispatch_get_main_queue()) { 
           self.animateImageView() 
         } 
       } 

       let transition = CATransition() 
       transition.type = kCATransitionFade 
       /* 
       transition.type = kCATransitionPush 
       transition.subtype = kCATransitionFromRight 
       */ 
       imageView.layer.addAnimation(transition, forKey: kCATransition) 
       imageView.image = images[index] 

       CATransaction.commit() 

       index = index < images.count - 1 ? index + 1 : 0 
     } 
} 

यह लागू के रूप में एक कस्टम छवि दृश्य बेहतर होगा।

+0

यह केवल विस्तार –

+2

@LeonardoSavioDabus .jpg बिना मेरे लिए काम करता है, मुझे लगता है कि है, क्योंकि आप परिसंपत्ति में अपनी छवियों को डाल कैटलॉग। –

+0

बिल्कुल। इसलिए यदि मैं इसे संसाधन फ़ोल्डर में रखता हूं तो मुझे शायद –

2

यहां एक स्टैंडअलोन क्लास है जिसका उपयोग आप फीड एनीमेशन के साथ छवि परिवर्तन को एनिमेट करने के लिए कर सकते हैं।

class FadeImageView: UIImageView 
{  
    @IBInspectable 
    var fadeDuration: Double = 0.13 

    override var image: UIImage? 
    { 
     get { 
      return super.image 
     } 
     set(newImage) 
     { 
      if let img = newImage 
      { 
       CATransaction.begin() 
       CATransaction.setAnimationDuration(self.fadeDuration) 

       let transition = CATransition() 
       transition.type = kCATransitionFade 

       super.layer.add(transition, forKey: kCATransition) 
       super.image = img 

       CATransaction.commit() 
      } 
      else { 
       super.image = nil 
      } 
     } 
    } 
} 
+0

मैंने इस कक्षा को UIImageView में जोड़ा और उस एनीमेशन का उपयोग करने के लिए लेकिन यह कस्टम संक्रमण का उपयोग नहीं करता है। मैं एनीमेशन छवियों में छवियां जोड़ता हूं और शुरू करने के लिए दृश्य को बताता हूं() लेकिन यह कस्टम एनीमेशन नहीं है। तो मैं क्या गलत हूं? Thx – MotoxX

+0

कोड के बिना मुझे कोई संकेत नहीं है कि समस्या क्या हो सकती है। यदि आप कर सकते हैं, तो आपके द्वारा लिखे गए कोड को पेस्ट करें और मैं देखूंगा कि क्या गलत है। https://pastebin.com/ – Ako

+0

मैंने आपके कोड के साथ एक नई कक्षा बनाई और इसे इंटरफ़ेस बिल्डर में UIImageView में जोड़ा। मैंने एक '@IBOutlet कमजोर var स्लाइड इमेज व्यू जोड़ा: FadeImageView!'। मेरी ViewController में मैं निम्नलिखित कोड का उपयोग कर एनीमेशन प्रारंभ करने का प्रयास: 'slideImageView.animationImages = [ UIImage (नाम:" Image1 ") !, UIImage (नाम:" Image2 ") !, UIImage (नाम:" छवि 3 ") !, UIImage (नाम:" छवि 4 ")] slideImageView.animationDuration = 25.0 slideImageView.startAnimating()' मुझे आशा है कि इस मदद करता है ... – MotoxX

1

animating कोड, this answer के आधार पर, में स्विफ्ट 3

let animationDuration: TimeInterval = 0.25 
let switchingInterval: TimeInterval = 3 
func animateImageView() 
{ 
    CATransaction.begin() 

    CATransaction.setAnimationDuration(animationDuration) 
    CATransaction.setCompletionBlock { 
     DispatchQueue.main.asyncAfter(deadline: .now() + self.switchingInterval) { 
      self.animateImageView() 
     } 
    } 

    let transition = CATransition() 
    transition.type = kCATransitionFade 
    /* 
    transition.type = kCATransitionPush 
    transition.subtype = kCATransitionFromRight 
    */ 
    imageView.layer.add(transition, forKey: kCATransition) 
    imageView.image = images.object(at: index) as! UIImage 

    CATransaction.commit() 

    index = index < images.count - 1 ? index + 1 : 0 
}