【发布时间】:2015-06-01 06:18:51
【问题描述】:
如何反映 setNeedsDisplay 的 UIView 更改?
在drawRect由setNeedsDisplay触发
- (void)drawRect:(CGRect)rect {
double i = 0;
for(...)
//i is incremented
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(i * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
drawStuff(element, context);
});
例如,每次绘制更新都会在 1s、2s、3s、...之后发生。
DrawStuff 用
dispatch_async(dispatch_get_main_queue(), ^(void) { ...
更新 UI 时。我已经尝试了UIBezierPath 和Core Graphics 并得到了相同的结果。我还使用UIGraphicsPushContext 和UIGraphicsPopContext 来获取正确的上下文。
使用 NSLog,我可以知道 drawStuff 是以 1s 为增量调用的。但是,可见的 UIView 保持不变。我可以旋转设备屏幕,这将重新定位 UIView 并更改其大小。旋转时,UIView 将反映它当前绘制的内容,但我需要再次旋转它才能在几秒钟后看到更新的状态。
回到上面的问题,是否有调用告诉 UIView 在setNeedsDisplay 之后显示其当前图形?谢谢。
【问题讨论】:
标签: ios objective-c iphone uiview uibezierpath