2

我有一个应用程序可以获取日历事件并向用户显示数据。尝试更新我的标签时,我遇到了一些奇怪的行为。

我可以很好地获取日历数据,但是当它完成后,我的问题是根据NSLog我的label.text属性已经改变了,但是在视图被重绘之前还有 4-8 秒。

因此,我试图检测标签何时重绘,而不是其.text属性更改时,因此我可以在标签中填充数据的同时隐藏进度视图。

我已经尝试过和setNeedsDisplay标签本身。标签的属性发生变化后 - 不起作用。setNeedsLayoutself.view.text

因此,除非我完全遗漏了有关使用 setNeedsDisplay 的某些内容(无论如何,我理解它只会在下一次重绘时更新),否则我的问题是,我如何检测UILabel和/或UIView重绘本身的时间?

我的应用程序是如何设置的:

在此处输入图像描述

我已经坚持了大约3周。

4

2 回答 2

3

确保setNeedsDisplay在主线程上被调用performSelectorOnMainThread:withObject:waitUntilDone:,例如:

[view performSelectorOnMainThread:@selector(setNeedsDisplay) 
                       withObject:nil 
                    waitUntilDone:NO];
于 2013-01-31T01:43:56.167 回答
0

引用苹果开发文档:

直到下一个绘图周期才真正重绘视图,此时所有无效的视图都将更新。

也许你的主线程被其他事情阻塞了,比如处理许多复杂的计算

例如:

- (void)testMethod
{
    myLabel.mytext = @"aaaa";
    [myLabel setNeedsDisplay];
    // some complex calculations
    // the quickest ,  it will run finish the method then redraw.
}
于 2013-01-31T01:53:14.573 回答