UIPageViewController очень лагает при смахивании - PullRequest
0 голосов
/ 27 апреля 2020

Итак, у меня есть очень простая UIPageViewController настройка для пролистывания нескольких экранов. Проблема в том, что он очень медленный и не отвечает на пролистывание, как, например, если бы я начинал быстро пролистывать, иногда он просто пропускал несколько страниц и показывал пустую в течение примерно 5 секунд, пока не появился как обычно, а индекс pageControl равен также очень медленно обновляется текущая точка страницы, для обновления которой требуется около 2 секунд.

На самом деле я даже настраиваю контроллеры представления, прежде чем даже представить PageController

 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 с подкачкой?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...