因此,我有一个非常简单的UIPageViewController
设置,可以在多个屏幕上滑动。问题是它非常缓慢并且对滑动没有反应,例如,如果我有时会开始快速滑动,有时它会跳过一些页面并显示空白页面大约5秒钟,然后它才能正常显示并且pageControl索引为更新当前页面点的速度也非常慢,大约需要2秒钟来更新点。
实际上,我什至在展示PageController之前都设置了View Controller
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "LaunchPages"{
let vc = segue.destination as! WeatherPageController
let index = sender as! IndexPath
vc.Controllers = ViewControllers
vc.initialVC = index.row
}
class WeatherPageController: UIPageViewController {
var Controllers : [WeatherViewController] = []
var initialVC = 0
var pageControl = UIPageControl()
override func viewDidLoad() {
super.viewDidLoad()
self.dataSource = self
self.delegate = self
configurePageControl()
setViewControllers([Controllers[initialVC]], direction: .forward, animated: true, completion: nil)
}
func configurePageControl(){
let rect = CGRect(x: 0, y: UIScreen.main.bounds.maxY - 50, width: UIScreen.main.bounds.width, height: 50)
let button = UIButton(frame: CGRect(x: UIScreen.main.bounds.maxX-40, y: UIScreen.main.bounds.maxY - 35, width: 20, height: 20))
button.setBackgroundImage(UIImage(systemName: "house.fill"), for: .normal)
button.tintColor = .white
button.addTarget(self, action: #selector(buttonPressed), for: .touchUpInside)
pageControl = UIPageControl(frame: rect)
pageControl.numberOfPages = Controllers.count
pageControl.currentPage = initialVC
self.view.addSubview(pageControl)
self.view.addSubview(button)
}
}
extension WeatherPageController : UIPageViewControllerDelegate,UIPageViewControllerDataSource{
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
guard let vcIndex = Controllers.firstIndex(of: viewController as! WeatherViewController) else{ return nil}
let next = vcIndex + 1
guard Controllers.count != next else {return nil}
guard Controllers.count > next else {return nil}
return Controllers[next]
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
guard let vcIndex = Controllers.firstIndex(of: viewController as! WeatherViewController) else{ return nil}
let previous = vcIndex - 1
guard previous >= 0 else {return nil}
guard Controllers.count > previous else { return nil}
return Controllers[previous]
}
func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
DispatchQueue.main.async {
let ContentVC = pageViewController.viewControllers![0] as! WeatherViewController
self.pageControl.currentPage = self.Controllers.firstIndex(of: ContentVC)!
}
}
func presentationCount(for pageViewController: UIPageViewController) -> Int {
return Controllers.count
}
}
因此,如您所见,PageController非常简单,不应那么慢。也许是在UIPageViewController
本身的实现中?也许我应该只使用UISrollViewController
来进行分页?