2016-10-27 10 views
0

В Swift 3.0 как можно применить эффект анимации к этому слайд-шоу? Невозможно найти эффекты анимации, связанные с методом animationWithDuration.Как применить эффект анимации к слайд-шоу UIImageView

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() 

    } 

ответ

0

Похоже, вы используете анимацию сборки в анимации кадра для UIImageView. Это предназначено для простого просмотра изображений, таких как анимированный gif. На самом деле у него нет более сложной анимации. Что вы можете сделать, если вы хотите использовать эффекты перехода, чередуются между двумя видами изображений и используют методы анимации UIView для переключения между ними. Это просто делает кроссфейд, манипулируя альфа:

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 
+0

спасибо за вашу помощь, я попробовал ваш ответ, может быть, я что-то не хватает в его применении, отредактировал мой вопрос – biggreentree

+0

я буду обновлять мой ответ с playround. –

+0

абсолютно здорово! эффект именно то, что я искал! Последний вопрос, в случае, если я хочу, чтобы в будущем было добавлено ручное удаление, вы предлагаете лучше использовать контроллер просмотра страницы? – biggreentree