Я новичок в 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
})
}
}
Нет, я не пробовал, потому что мне нужна анимация, в которой движутся сами картинки. С этим кодом, который вы отправляете, у меня нет такого эффекта. Но спасибо, что пытаетесь найти хоть какое-то решение.
Итак, я не понимаю, что вы пытаетесь сказать с помощью «Могу ли я анимировать массив изображений, как будто вы прокручиваете изображения в режиме прокрутки с включенным разбиением по страницам», вы можете лучше всего объяснить?
С помощью этого кода, который я публикую здесь, у меня есть анимация, в которой изображения перемещаются одно за другим, и похоже, что они записаны на ленту. Но я хочу, чтобы они отображались с небольшими перерывами между ними, чтобы выглядело так, как будто вы вручную пролистываете UIScrollView с большим количеством изображений и проверяете, что включение разбиения по страницам включено.
Ладно, я понял. Я кое-что делаю и перехожу к доставке по ответу
Хорошо, если я правильно понимаю, что вы хотите, это правильный ответ. Анимируйте постранично с задержкой в 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)
}
}
Да, это мне очень помогло. Большое Вам спасибо. Функция Timer.scheduledTimer широко используется, я встречался с этой функцией, но я не использовал ее таким образом с комбинацией текущей страницы. Спасибо за быстрое решение
Рад помочь вам, можете ли вы выбрать правильный ответ?
Вы пробовали использовать
self.mainScrollView.setContentOffset(contentOffset: newOffset, animated: true)
, а неUIView.animate(withDuration: Double(imageArray.count), delay: 5, options: [.repeat, .allowUserInteraction], animations: { self.mainScrollView.contentOffset = newOffset })
?