UIView.animate с imageArray внутри UIScrollView, но с таким эффектом, как включение подкачки - PullRequest
0 голосов
/ 18 декабря 2018

Я новичок в Swift, но у меня есть некоторый базовый опыт.Я успешно создал анимацию с тремя изображениями, и они повторяются.Но я бы хотел, чтобы эффект этого повторения был таким, как если бы вы в инспекторе атрибутов UIScrollView проверяли включение подкачки.

Внутри параметров: UIView.AnimationOptions Я пробовал разные константы, но не могу найти то, что мне подходит.

Мой вопрос: можно ли анимировать массив изображений, как вы проводите пальцем по изображениям в режиме прокрутки, с включенной подкачкой?

class ViewController: UIViewController {

    @IBOutlet weak var mainScrollView: UIScrollView!

    var imageArray = [UIImage]()

    override func viewDidLoad() {
        super.viewDidLoad()

        imageArray = [UIImage(named: "forest")!, UIImage(named: "slika1")!, UIImage(named: "slika2")!]

        for i in 0..<imageArray.count {

            let imageView = UIImageView()
            imageView.image = imageArray[i]
            imageView.contentMode = .scaleAspectFit
            let xPosition = self.miniView.frame.width * CGFloat(i)
            imageView.frame = CGRect(x: xPosition, y: 0, width: self.mainScrollView.frame.width, height: self.mainScrollView.frame.height)

            mainScrollView.contentSize.width = mainScrollView.frame.width * CGFloat(i + 1)
            mainScrollView.addSubview(imageView)

        }

        startAnimating()
    }

    func startAnimating() {
        var newOffset = mainScrollView.contentOffset
        newOffset.x = 0.0
        newOffset.x += mainScrollView.frame.width * CGFloat(imageArray.count - 1)
        UIView.animate(withDuration: Double(imageArray.count), delay: 5, options: [.repeat, .allowUserInteraction], animations: {
            self.mainScrollView.contentOffset = newOffset
        })
    }

}

1 Ответ

0 голосов
/ 19 декабря 2018

Хорошо, если я правильно понимаю, что вы хотите, это правильный ответ.Анимируйте страницу за страницей с 5-секундной задержкой с одной анимацией и другой.

Вам необходимо использовать Timer.scheduledTimer, чтобы вызвать метод, который прокручивает до следующей страницы.С помощью этого решения вы можете проверить, включена ли функция подкачки страниц, чтобы пользователь мог изменять саму страницу.

Надеюсь, это поможет

class ViewController: UIViewController {

        @IBOutlet weak var mainScrollView: UIScrollView!

        var imageArray = [UIImage]()

        var currentPage = 0

        override func viewDidLoad() {
            super.viewDidLoad()

            imageArray = [UIImage(named: "forest")!, UIImage(named: "slika1")!, UIImage(named: "slika2")!]

            for i in 0..<imageArray.count {

                let imageView = UIImageView()
                imageView.image = imageArray[i]
                imageView.contentMode = .scaleAspectFit
                let xPosition = self.miniView.frame.width * CGFloat(i)
                imageView.frame = CGRect(x: xPosition, y: 0, width: self.mainScrollView.frame.width, height: self.mainScrollView.frame.height)

                mainScrollView.contentSize.width = mainScrollView.frame.width * CGFloat(i + 1)
                mainScrollView.addSubview(imageView)

            }

            Timer.scheduledTimer(timeInterval: 5, target: self, selector: #selector(startAnimating), userInfo: nil, repeats: true)
        }

        @objc func startAnimating() {

           //that line check if the current page is the last one, and set it to the first, otherwise, it increment the currentPage
           self.currentPage = (self.currentPage == imageArray.count-1) ? 0 : self.currentPage+1


           var newOffset = mainScrollView.contentOffset
           newOffset.x = mainScrollView.frame.width * CGFloat(self.currentPage)

           self.mainScrollView.setContentOffset(newOffset, animated: true)
       }

    }
...