首页 > 解决方案 > 为什么uiview更新延迟很多?

问题描述

我有三个视图控制器。
第一个 VC 名称是 VC1(初始视图控制器),其中包含标签和容器视图。第二个 VC(VC2) 是嵌入在 VC1 的容器视图中的 PageViewController。
第三个VC(VC3)是VC2的内容页。


class VC1: UIViewController, DelegateClass1{

    func setText(_ index: Int) {
        lblIndex.text = "\(index)"
    }  

...

}

protocol DelegateClass1: class {
    func setText(_ index:Int)
}


class VC2: UIPageViewController,UIPageViewControllerDelegate,UIPageViewControllerDataSource, DelegateClass2 {

    func setTextFromVC3(_ index: Int) {
        delegateClass1?.setText(index)
    }

var delegateClass1:DelegateClass1?

...
}

protocol DelegateClass2: class {
    func setTextFromVC3(_ index:Int)
}


class VC3: UIViewController {

var delegateClass2: DelegatClass2?

override func viewDidAppear(_ animated: Bool) {    
    delegateClass2?.setTextFromVC3(pageIndex)
}

...
}

问题:

通过滚动更改 VC2 的当前页面后,我希望新页面的索引显示在 VC1 的标签内,所以我将此命令放在 VC3 的 didAppear 事件中。我在模拟器上测试了很多次,更新标签文本需要很多秒。我不使用任何异步方法。问题出在哪里?
谢谢。


编辑:
我的问题中的一个新发现:我看到当我使用 Page Curl 而不是 Scroll 作为 VC2 的转换样式时,不存在延迟问题,但我不想要这种转换样式。

标签: iosxcodeuipageviewcontrolleruicontainerview

解决方案


您是否尝试使用UIPageViewControllerDelegate更新您的标签?在将页面视图控制器实例嵌入容器之前,使您VC1符合, 并设置委托。然后重写这个方法:UIPageViewControllerDelegateVC1

- (void)pageViewController:(UIPageViewController *)pageViewController
        didFinishAnimating:(BOOL)finished
   previousViewControllers:(NSArray<UIViewController *> *)previousViewControllers
       transitionCompleted:(BOOL)completed {
        if (finished) {
            lblIndex.text = "\(index)"
        }
    }
}

推荐阅读