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的主要内容,如果未能解决你的问题,请参考以下文章
在我的 WatchKit 扩展中引用一个 Objective c 类(swift)
更新到 Swift 3 破坏了我的 swifty json 代码