簡體   English   中英

使用頁面視圖 Controller 在視圖之間滑動時防止視圖控制器更新

[英]Prevent view controllers from updating when swiping between views with a Page View Controller

我的一個觀點在主頁上有很多數據調用。 目前,當我滑動到另一個視圖時,速度非常慢。 PageViewController 的代碼如下:

struct PageViewController: UIViewControllerRepresentable {

    var viewControllers: [UIViewController]
    ...
    func makeUIViewController(context: Context) -> UIPageViewController {
        let pageViewController = UIPageViewController(
            transitionStyle: .scroll,
            navigationOrientation: .horizontal)

        pageViewController.dataSource = context.coordinator

        return pageViewController
    }

    func updateUIViewController(_ pageViewController: UIPageViewController, context: Context) {
        pageViewController.setViewControllers(
            [viewControllers[0]], direction: .forward, animated: true)
    }

    class Coordinator: NSObject, UIPageViewControllerDataSource {

        var parent: PageViewController

        init(_ pageViewController: PageViewController) {
            self.parent = pageViewController
        }

        func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
            guard let index = parent.viewControllers.firstIndex(of: viewController) else {
                 return nil
             }

            if index == 0 {
                return nil
            }

            return parent.viewControllers[index - 1]
        }

        func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
            guard let index = parent.viewControllers.firstIndex(of: viewController) else {
                return nil
            }
            if index + 1 == parent.viewControllers.count {
                return nil
            }
            return parent.viewControllers[index + 1]
        }
    }

}

有沒有辦法在用戶每次滑動時不更新視圖?

使用以下

func makeUIViewController(context: Context) -> UIPageViewController {
    let pageViewController = UIPageViewController(
        transitionStyle: .scroll,
        navigationOrientation: .horizontal)

    pageViewController.dataSource = context.coordinator
    pageViewController.setViewControllers(          // << move here !!
        [viewControllers[0]], direction: .forward, animated: true)

    return pageViewController
}

func updateUIViewController(_ pageViewController: UIPageViewController, context: Context) {
   // do something here only if some model/states changed
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM