繁体   English   中英

绘制后反映UIView的变化

[英]Reflecting UIView changes after drawing

如何反映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时。 我已经尝试了UIBezierPathCore Graphics并获得了相同的结果。 我也使用UIGraphicsPushContextUIGraphicsPopContext获取正确的上下文。

使用NSLog,我可以知道以1s为增量调用了drawStuff。 但是,可见的UIView保持不变。 我可以旋转设备屏幕,这将重新定位UIView并更改其大小。 旋转时,UIView将反映当前绘制的内容,但是几秒钟后,我需要再次旋转以查看更新后的状态。

回到上面的问题,是否有电话告诉UIView在setNeedsDisplay之后显示其当前图形? 谢谢。

如果要确保每秒重绘一次视图,则正确的方法是在视图的其他位置设置某种形式的计时器,并使计时器函数调用-setNeedsDisplay 反过来,这将作废您的看法,使你的-drawRect:被调用,它应该做的图纸(即打电话给你drawStuff

从概念上讲, -drawRect:应该只是一个愚蠢的方法,它仅根据视图的当前状态如何知道如何进行实际的绘制工作。 除此之外的常规事件逻辑(或计时器)应该(a)根据需要更新状态,并且(b)将视图标记为需要重绘。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM