检测UIView / UILabel何时重绘?

时间:2013-01-31 01:34:56

标签: ios uiview calendar uilabel

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

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

因此,我正在尝试检测标签何时被重绘,而不是在.text属性发生变化时,因此我可以在标签中填充数据的同时隐藏进度视图。

我已在setNeedsDisplay上尝试了setNeedsLayoutself.view以及标签本身。 标签的.text属性发生变化后 - 无效。

除非我完全遗漏了使用setNeedsDisplay的东西(我只理解下次重绘时的更新),我的问题是,如何检测UILabel和/或{{1}的时间重绘自己?

我的应用是如何设置的:

enter image description here

我已经坚持了大约3个星期。

2 个答案:

答案 0 :(得分:3)

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

[view performSelectorOnMainThread:@selector(setNeedsDisplay) 
                       withObject:nil 
                    waitUntilDone:NO];

答案 1 :(得分:0)

引用apple开发文档:

  

直到下一个绘图周期才会重新绘制视图,此时所有无效视图都会更新。

也许你的主线程被其他东西阻挡,比如处理许多复杂的计算

例如:

- (void)testMethod
{
    myLabel.mytext = @"aaaa";
    [myLabel setNeedsDisplay];
    // some complex calculations
    // the quickest ,  it will run finish the method then redraw.
}