我有一个应用程序可以获取日历事件并向用户显示数据。我在尝试更新标签时遇到了一些奇怪的行为。
我可以很好地获取日历数据但是当完成后,我的问题是根据NSLog
我的label.text
属性已经改变,但是在视图获得之前还有4-8秒重绘。
因此,我正在尝试检测标签何时被重绘,而不是在.text
属性发生变化时,因此我可以在标签中填充数据的同时隐藏进度视图。
我已在setNeedsDisplay
上尝试了setNeedsLayout
和self.view
以及标签本身。 在标签的.text
属性发生变化后 - 无效。
除非我完全遗漏了使用setNeedsDisplay的东西(我只理解下次重绘时的更新),我的问题是,如何检测UILabel
和/或{{1}的时间重绘自己?
我的应用是如何设置的:
我已经坚持了大约3个星期。
答案 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.
}