在Swift中添加图像转换animation
下面是在不同的图像之间自动转换的代码,每5秒钟一次。 我想添加animation的过渡,即淡出,从左侧滚动,等我怎么去在Swift做这个? 谢谢。
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() }
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 } }
实现它作为一个自定义图像视图会更好。
这是一个独立的类,你可以使用淡入淡出的animation来改变图像的animation。
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 } } } }
基于这个答案 ,在Swift 3中animation代码
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 }