Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 检测UIView/UILabel何时重新绘制自身?_Ios_Uiview_Calendar_Uilabel - Fatal编程技术网

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
my
label.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.
}