gpt4 book ai didi

ios - 反射(reflect)绘制后UIView的变化

转载 作者:行者123 更新时间:2023-11-29 01:58:49 27 4
gpt4 key购买 nike

如何反射(reflect) 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);
});

例如,每次绘制更新​​都会在 1 秒、2 秒、3 秒……之后发生

DrawStuff 使用

切换回主线程
dispatch_async(dispatch_get_main_queue(), ^(void) { ...

更新用户界面时。我尝试了 UIBezierPath 和 Core Graphics 并得到了相同的结果。我还使用 UIGraphicsPushContext 和 UIGraphicsPopContext 来获取正确的上下文。

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

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

最佳答案

如果你想确保你的 View 每秒重绘一次,正确的方法是在你的 View 中其他地方设置某种形式的计时器,并让计时器函数调用-setNeedsDisplay。这反过来会使您的 View 无效并导致您的 -drawRect: 被调用,它应该进行绘图(即调用您的 drawStuff)

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

关于ios - 反射(reflect)绘制后UIView的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30566823/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com