如何将动画效果应用于UIImageView幻灯片

时间:2016-10-27 16:37:24

标签: ios uiimageview swift3 uiviewanimation

在Swift 3.0上,如何对此幻灯片应用一些动画效果?找不到与animationWithDuration方法相关的动画效果。

    let image1 = UIImage(named: "image1")!
    let image2 = UIImage(named: "image2")!
    let image3 = UIImage(named: "image3")!


    var imagesArray : [UIImage] = []



    override func viewDidLoad() {
        super.viewDidLoad()


        imagesArray = [image1, image2, image3]

        myView.clipsToBounds = true


        myView.animationImages = imagesArray
        myView.animationDuration = 10.0
        myView.animationRepeatCount = 0
        myView.startAnimating()

    }

1 个答案:

答案 0 :(得分:0)

看起来你正在使用UIImageView的构建框架动画。这是为了循环浏览图像,就像动画gif一样。它没有比那更复杂的动画。如果想要转换效果,可以执行的操作是两个图像视图之间的交替,并使用UIView动画方法在它们之间切换。这只是通过操纵alpha来实现交叉淡入淡出:

    var images = [UIImage]()
    var currentImageindex = 0
    func animateImageViews() {
        swap(&firstImageView, &secondImageView)
        secondImageView.image = images[currentImageindex]
        currentImageindex = (currentImageindex + 1) % images.count
        UIView.animate(withDuration: 1, animations: {
            self.firstImageView.alpha = 0
            self.secondImageView.alpha = 1
            }, completion: { _ in
            self.animateImageViews()
        })
    }

这是一个展示其运作方式的游乐场。您需要将2个图像放入名为1.png和2.png的资源文件夹中才能生效。请注意,设置这样的视图帧是可怕的编程实践,我在这里为了简洁起见。在实际代码中使用界面构建器和自动布局。

    import PlaygroundSupport
    import UIKit

    class Demo: UIViewController {
        let button = UIButton()


        var firstImageView = UIImageView()
        var secondImageView = UIImageView()
        var images = [UIImage]()
        var currentImageindex = 0
        override func viewDidLoad() {
            view.addSubview(firstImageView)
            view.addSubview(secondImageView)
            images.append(UIImage(named: "1.png")!)
            images.append(UIImage(named: "2.png")!)
            firstImageView.image = images[0]
            secondImageView.image = images[1]
        }

        override func viewDidLayoutSubviews() {
            super.viewDidLayoutSubviews()
            firstImageView.frame = view.frame
            secondImageView.frame = view.frame
        }

        override func viewDidAppear(_ animated: Bool) {
            animateImageViews()
        }

        func animateImageViews() {
            swap(&firstImageView, &secondImageView)
            secondImageView.image = images[currentImageindex]
            currentImageindex = (currentImageindex + 1) % images.count
            UIView.animate(withDuration: 1, animations: {
                self.firstImageView.alpha = 0
                self.secondImageView.alpha = 1
                }, completion: { _ in
                self.animateImageViews()
            })
        }
    }
    let viewcontroller = Demo()
    viewcontroller.view.frame = CGRect(x: 0, y: 0, width: 100, height: 100)
    PlaygroundPage.current.liveView = viewcontroller.view