0

我正在使用 UIKit 构建一个跨平台 UI 库的 iOS 实现,该库的主要功能之一是允许用户自由更改子控件的大小,并且父控件的大小会自动适应。

由于每次更改孩子的大小时都刷新父级的大小是低效且不必要的,因此我设计了 UI 系统以在实际设备绘制/渲染发生之前刷新所有“脏”控件的位置、大小和很多事情。在 iOS 上,我使用 CADisplayLink 调用刷新方法,然后我发现在所有内容都显示在屏幕上之后调用了该事件,这导致了以下问题:

  1. 用户将首先看到“崩溃”的布局。(渲染首先发生)
  2. 短时间后(CADisplayLink 的事件触发),一切都会恢复正常。

一开始我以为我使用CADisplayLink的方式是错误的,但是在任何地方都找不到解决方案,所以我现在很绝望(我要上吊了!!)

或者也许我根本不应该使用 CADisplayLink?

请帮我!


PS。由于我正在构建一个跨平台的东西,我实际上使用的是 MonoTouch,但我相信基本概念是相同的。

PS2。而且由于我使用的是C#的MonoTouch,所以上面的描述可能不适合Objective-C的世界(比如“事件”这个词,我认为与Obj-C相关的是选择器,或者什么^_^)

PS3。另外请原谅我的英语不好,如果我的描述不够清楚,请随时问我。

这里的代码:

CADisplayLink _displayLink = CADisplayLink.Create(Update);  //Update is my refresh method
_displayLink.AddToRunLoop(NSRunLoop.Current, NSRunLoop.NSDefaultRunLoopMode);

应该很容易理解^_^

4

1 回答 1

0

从我能收集到的所有信息来看,基本上没有办法做到这一点。所以我修改了我的布局代码,现在在设置值后立即应用属性。仍然需要一些优化,但不再需要依赖 CADisplayLink。

不管怎么说,还是要谢谢你!

于 2013-01-29T06:49:26.873 回答