为什么更新uiview会有很多延迟?

时间:2018-06-22 15:29:44

标签: ios xcode uipageviewcontroller uicontainerview

我有三个视图控制器。
第一个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的过渡样式时,不存在延迟问题,但是我不希望这种过渡样式。

1 个答案:

答案 0 :(得分:0)

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

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