Ios 检测UIView/UILabel何时重新绘制自身?
我有一个应用程序,可以获取日历事件并向用户显示数据。我在尝试更新标签时出现了一些奇怪的行为 我可以很好地获取日历数据,但当完成时,我的问题是根据Ios 检测UIView/UILabel何时重新绘制自身?,ios,uiview,calendar,uilabel,Ios,Uiview,Calendar,Uilabel,我有一个应用程序,可以获取日历事件并向用户显示数据。我在尝试更新标签时出现了一些奇怪的行为 我可以很好地获取日历数据,但当完成时,我的问题是根据NSLogmylabel.text属性已经更改,但视图重新绘制还需要4-8秒 因此,我试图检测标签何时被重绘,而不是何时。text属性发生更改,以便在标签中填充数据的同时隐藏进度视图 我已经在self.view和标签本身上尝试了setNeedsDisplay和setNeedsLayout。标签的.text属性更改后-不起作用。 因此,除非我完全忽略了使用
NSLog
mylabel.text
属性已经更改,但视图重新绘制还需要4-8秒
因此,我试图检测标签何时被重绘,而不是何时。text
属性发生更改,以便在标签中填充数据的同时隐藏进度视图
我已经在self.view
和标签本身上尝试了setNeedsDisplay
和setNeedsLayout
。标签的.text
属性更改后-不起作用。
因此,除非我完全忽略了使用setNeedsDisplay(我只了解下次重画时的更新),否则我的问题是,如何检测UILabel
和/或UIView
何时重画自身
如何设置我的应用程序:
我已经在这上面呆了三个星期了 确保在主线程上调用了
setNeedsDisplay
,例如:
[view performSelectorOnMainThread:@selector(setNeedsDisplay)
withObject:nil
waitUntilDone:NO];
引用苹果开发文档: 在下一个绘图周期之前,不会实际重新绘制视图,此时所有无效视图都将更新 也许你的主线程被其他事情阻塞了,比如处理许多复杂的计算 例如:
刷新标签不应花费4-8秒,除非您阻塞主线程那么长时间,或者如果您没有在主线程上设置.text值,则可能需要4-8秒。执行抓取的我的singleton有一个调用
[mainViewController updateLabels]的委托代码>是使用委托的主线程的“外部”吗?你能澄清一下吗?如何在主线程上具体调用它?我的singleton调用的是[mainViewController updateLabels]代码>。我为我的singleton调用了一个新方法:[mainViewController refreshLabels]我在其中使用了[self-performSelectorOnMainThread:@selector(updateLabels)with-Object:nil waitUntilDone:NO]代码>它就像一个符咒。谢谢。请注意,您根本不需要调用setNeedsDisplay
。在这种情况下,只需确保更新主线程上的标签就足够了。
- (void)testMethod
{
myLabel.mytext = @"aaaa";
[myLabel setNeedsDisplay];
// some complex calculations
// the quickest , it will run finish the method then redraw.
}