【问题标题】:Why there is many delay in update of uiview?为什么uiview更新延迟很多?
【发布时间】:2018-12-02 03:03:23
【问题描述】:

我有三个视图控制器。
第一个 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的Transition style时,不存在延迟问题,但我不想要这种transition style。

【问题讨论】:

  • 你试过在viewWillAppear(_:)做吗?
  • @Rico - 我试过你的评论,当我完全滚动页面时它起作用了。但是如果我做了一个不完整的滚动,虽然 viewWillAppear 在滚动之前再次调用了页面,但是标签文本像以前一样延迟改变。我该如何解决这个问题?

标签: ios xcode uipageviewcontroller uicontainerview


【解决方案1】:

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

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

【讨论】:

  • 我尝试过这种方式,虽然它与我的方法几乎没有区别(在我的方法中,我使 VC2 符合 UIPageViewControllerDelegate 和 UIPageViewControllerDataSource)但结果和以前一样。
  • 好吧,那我想不出还有什么可能会导致延迟。尝试将委托调用分派到主线程,看看是否有帮助。 DispatchQueue.main.async { delegateClass2?.setTextFromVC3(pageIndex) }
  • 不,和以前一样。
猜你喜欢
  • 2011-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-08
  • 1970-01-01
  • 1970-01-01
  • 2019-01-13
相关资源
最近更新 更多