swift 我的PageViewController

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了swift 我的PageViewController相关的知识,希望对你有一定的参考价值。

import UIKit
import SnapKit
import JSQDataSourcesKit

class CellViewModel {
    var title: String = "Заголовок"
    var body: String = "Давно выяснено, что при оценке дизайна и композиции читаемый текст мешает сосредоточиться. Lorem Ipsum используют потому, что тот обеспечивает более или менее стандартное заполнение шаблона, а также реальное распределение букв и пробелов в абзацах, которое не получается при простой дубликации. Многие программы электронной вёрстки и редакторы HTML используют Lorem Ipsum в качестве текста по умолчанию, так что поиск по ключевым словам сразу показывает, как много веб-страниц всё ещё дожидаются своего настоящего рождения. За прошедшие годы текст Lorem Ipsum получил много версий. Некоторые версии появились по ошибке, некоторые - намеренно (например, юмористические варианты)."
}

class OfferDetailViewController: BaseTableViewController, OfferDetailViewInput {
    
    var key: String?
    var vc: PageViewController?
    typealias TableCellConfig = ReusableViewConfig<CellViewModel, MyTextCell>
    var dataSourceProvider: DataSourceProvider<DataSource<CellViewModel>, TableCellConfig, TableCellConfig>?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        vc = PageViewController(transitionStyle: .scroll, navigationOrientation: .horizontal, options: nil)
        vc!.view.frame = CGRect(x: 0, y: 0, width: 0, height: 300)
        vc!.pageControll.frame = CGRect(x: 0, y: 210, width: 0, height: 50)
        tableView.tableHeaderView = vc!.view
//        tableView.separatorStyle = UITableViewCellSeparatorStyle.none
        
        tableView.rowHeight = UITableViewAutomaticDimension
        
        // setup tableview content
        tableView.register(UINib(nibName: "TextCell", bundle: nil), forCellReuseIdentifier: "body")
        let dataSource = DataSource(sections: Section(items: CellViewModel()))
        let config = ReusableViewConfig<CellViewModel, MyTextCell>(reuseIdentifier: "body") { (cell, model: CellViewModel?, type, tableView, indexPath) -> MyTextCell in
            cell.title?.text = model!.title
            cell.body?.text = model!.body
            return cell
        }
        dataSourceProvider = DataSourceProvider(dataSource: dataSource,
                                                    cellConfig: config,
                                                    supplementaryConfig: config)
        
        tableView.dataSource = dataSourceProvider?.tableViewDataSource
        
    }
    
    func configureViewWithKey(_ key: String) {
        print(key)
    }
}

// MARK: Button Action
extension OfferDetailViewController {
    override func performSegue(withIdentifier identifier: String, sender: Any?) {
        if identifier == "page" {
            if let vc = segue.destination as? PageViewController {
                //
                vc.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%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%2F-L7bM1f2aYGGwLNCDSNr%2Fimg_1518014663757.jpg?alt=media&token=34095b90-a53a-4413-8e67-f5633d154c1f"]
            }
        }
    }
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "page" {
            if let vc = segue.destination as? PageViewController {
                //
                vc.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-L85HnRFlWJJwZeqHtLn%2F%D0%A1%D1%80%D0%B5%D0%B4%D0%B8-%D1%80%D0%B8%D1%81%D0%BE%D0%B2%D1%8B%D1%85-%D0%BF%D0%BE%D0%BB%D0%B5%D0%B8%CC%86-%D0%BE.-%D0%91%D0%B0%D0%BB%D0%B8-%D0%98%D0%BD%D0%B4%D0%BE%D0%BD%D0%B5%D0%B7%D0%B8%D1%8F.jpg?alt=media&token=96f4fbec-ca21-47ec-a776-af9551413c1a",
             "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"]
            }
        }
    }
}
import UIKit
import Kingfisher

class PageViewController: UIPageViewController {
    
    var imageStrings: [String] = [] {
        didSet {
            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)
        }
    }
    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)
        
        
    }
}

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]))
    }
}

以上是关于swift 我的PageViewController的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 Swift 应用程序无法编写脚本?

在我的 WatchKit 扩展中引用一个 Objective c 类(swift)

更新到 Swift 3 破坏了我的 swifty json 代码

为啥我的图像无法在 Swift 中正确加载

将我的 NSManagedObject 子类与我的 ViewController.swift 连接起来

Swift 3 - 为啥我的导航栏没有显示?