class PageViewController: UIPageViewController {
let imageStrings = [
"https://firebasestorage.googleapis.com/v0/b/samuiplus-9d4b0.appspot.com/o/categories%2Foffers%2F-L7ZLum7uwZ7IAS1gP0n%2F-L7bM1f2aYGGwLNCDSNr%2Fimg_1518014663757.jpg?alt=media&token=34095b90-a53a-4413-8e67-f5633d154c1f",
"https://firebasestorage.googleapis.com/v0/b/samuiplus-9d4b0.appspot.com/o/categories%2Foffers%2F-L7ZLum7uwZ7IAS1gP0n%2FJoWhuY49ArM.jpg?alt=media&token=88b07e59-04b4-4eb8-b57e-87adc99d9208",
"https://firebasestorage.googleapis.com/v0/b/samuiplus-9d4b0.appspot.com/o/categories%2Foffers%2F-L85H0HTGT6s704K8qpt%2Fimages%20(62).jpg?alt=media&token=5b9c2537-2809-45a0-8a7d-48294ae974ca"
]
var pageControll = UIPageControl()
private var pendingIndex: Int?
override func viewDidLoad() {
super.viewDidLoad()
dataSource = self
delegate = self
view.backgroundColor = UIColor.black
pageControll.numberOfPages = imageStrings.count
pageControll.currentPage = 0
view.addSubview(pageControll)
var controllers: [UIViewController] = []
if (imageStrings.isNotEmpty) {
let controller = FrameViewController()
controller.imageUrl = URL(string: imageStrings[0])
controllers.append(controller)
}
setViewControllers(controllers, direction: .forward, animated: true, completion: nil)
}
}
extension PageViewController: UIPageViewControllerDataSource {
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
let vc = (viewController as! FrameViewController)
let newPosition = vc.position - 1
if (newPosition >= 0) {
let newvc = FrameViewController()
newvc.imageUrl = URL(string: imageStrings[newPosition])
newvc.position = newPosition
return newvc
}
return nil
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
let vc = (viewController as! FrameViewController)
let newPosition = vc.position + 1
if (newPosition < imageStrings.count) {
let newvc = FrameViewController()
newvc.imageUrl = URL(string: imageStrings[newPosition])
newvc.position = newPosition
return newvc
}
return nil
}
}
extension PageViewController: UIPageViewControllerDelegate {
func pageViewController(_ pageViewController: UIPageViewController, willTransitionTo pendingViewControllers: [UIViewController]) {
pendingIndex = (pendingViewControllers.first as? FrameViewController)?.position
}
func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
if (completed) {
if let index = pendingIndex {
pageControll.currentPage = index
}
}
}
}
class FrameViewController: UIViewController {
var position = 0
var imageUrl: URL? {
didSet {
iv.kf.setImage(with: imageUrl)
}
}
let iv: UIImageView = {
let iv = UIImageView()
iv.contentMode = .center
iv.clipsToBounds = true
iv.backgroundColor = UIColor.black
iv.translatesAutoresizingMaskIntoConstraints = false
return iv
}()
override func viewDidLoad() {
view.backgroundColor = UIColor.white
view.addSubview(iv)
view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|[v0]|", metrics: nil, views: ["v0": iv]))
view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|[v0]|", metrics: nil, views: ["v0": iv]))
}
}