ios - 为什么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 的转换样式时,不存在延迟问题,但我不想要这种转换样式。
解决方案
您是否尝试使用UIPageViewControllerDelegate
更新您的标签?在将页面视图控制器实例嵌入容器之前,使您VC1
符合, 并设置委托。然后重写这个方法:UIPageViewControllerDelegate
VC1
- (void)pageViewController:(UIPageViewController *)pageViewController
didFinishAnimating:(BOOL)finished
previousViewControllers:(NSArray<UIViewController *> *)previousViewControllers
transitionCompleted:(BOOL)completed {
if (finished) {
lblIndex.text = "\(index)"
}
}
}
推荐阅读
- c++ - 检查 UTF-8 是 wchar_t 还是 char?
- javascript - 如何使用 Stophe 在 XML 消息中添加元素
- java - 启动应用程序的问题
- excel - Excel VBA Networkdays 与公司假期,无法获得 Networkdays 财产
- javascript - 状态中的变量未定义
- web - “帮助修复 Flutter Web 中的‘模糊渲染’”
- swift - 当我在文本字段中编辑文本时,NavigationLink 会激活
- grails - 如何在grails中获取基本项目目录名称?
- r - 试图找到一种巧妙的方法来迭代地从向量中生成具有列名的新变量
- python - 将日期时间的 np 数组与 python 中的单个日期时间进行比较