问题标签 [setneedsdisplay]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3214 浏览

iphone - UIView setNeedsDisplay 不在主线程上?

在我的 iPhone 应用程序中,我有一个辅助线程,用于在后台执行任务,每隔几毫秒,必须更新视图(而不是从主线程)。我在 UIView 子类中尝试了以下代码:

这在模拟器上效果很好,但是在我的设备上,它非常滞后。我唯一能想到的是主线程被 UIKit 的常规例程所困,这意味着我的 setNeedsDisplay 在它应该调用的时候被调用了很长时间(大约 1/2 秒后)。我认为这是因为在其他代码中,基于用户交互,我立即调用 setNeedsDisplay,它运行良好,完全没有任何延迟。辅助线程上的后端计算少于用户界面线程上的后端计算。这会在我的应用程序中导致一些非常糟糕的视觉效果。

所以,总结一下,我该如何解决这个问题?


更新:

我还有另一种方法可以告诉视图它需要每秒刷新 x 次吗?如果可能的话,这最终可能对我来说是更好的表现。我试过 CADisplayLink 没有成功...

0 投票
1 回答
1963 浏览

uiscrollview - drawRect 使 UIScrollView 中的滚动变慢

我有一个 UIScrollView,里面有一个(自定义)UIView。

在我调用的 scrollViewDidScroll 方法中

如果我在自定义 UIView 中实现 drawRect: 方法,这会使滚动明显变慢——即使它完全是空的。

一旦我删除了 drawRect: 方法,它就又恢复了。

我完全不知道,为什么……你们中的任何人?

0 投票
1 回答
1970 浏览

iphone - UIView 实时强制重绘(绘图应用)

我正在开发一个绘图应用程序。我将笔画收集为点并将这些点绘制到我的 UIView 子类的 drawRect 方法中。

我通过覆盖touchesBegantouchesMoved来收集要点touchesEnded。在所有这些我调用的方法[self setNeedsDisplay]中,我希望实时看到笔画......它不会发生,实际上 drawRect 方法仅在之后调用touchesEnded

我需要一种方法来不简单地将视图标记为已丢弃,但我需要强制系统执行 drawRect 调用。

任何的想法 ?

0 投票
1 回答
506 浏览

objective-c - setNeedsDisplay 发布子视图?

如果自定义视图根据条件向自身添加了多个子视图if,然后setNeedsDisplay在该条件不再存在的情况下在此视图上调用a true,因此不会创建这些子视图,“旧”子视图是否会自动从内存中释放drawRect

或者,我应该担心检查子视图的存在,然后释放它们setNeedsDisplay吗?

我想最终我的问题是关于 的内存含义setNeedsDisplay,如果它有效地从内存中删除旧视图及其子视图,然后基本上从头开始重新创建视图?

0 投票
0 回答
812 浏览

iphone - iPhone SDK UIView drawRect 和方向改变

我已经编写了这段代码... plotView 是通过 drawRect 方法以编程方式绘制的...问题是当我更改设备方向时...所有视图都没有正确缩放... autoresizing mask 有什么问题?我应该玩 setNeedsDisplay 还是类似的?

提前致谢!

}

0 投票
2 回答
1439 浏览

iphone - iphone - SetNeedsDisplay 不工作

我正在尝试在此代码中刷新我的主视图。它显示了正确的子视图,但它保留了已经显示的其他视图。我已经尝试过 setNeedsDisplay 和 setNeedsLayout 但没有成功。

有任何想法吗?

代码:

问候!

0 投票
1 回答
668 浏览

graphics - 在 OS X 下需要时不调用 drawRect

我正在使用一个使用 NSView 子类的窗口。其中一部分是在程序启动时绘制的,另一部分需要在用户单击另一个窗口中的按钮时绘制。另一个窗口的代码毫无问题地调用我的 NSView 子类,创建新图形,然后返回。但是,需要用新图形更新的窗口不会改变。

当我将开始图形和稍后要绘制的图形都放在初始 drawRect 调用中时,一切都没有问题地绘制。但是,当用户单击第二个窗口上的按钮时,不会调用 drawRect。我已经尝试过 awakeFromNib、setNeedsDisplay、needsDisplay 和 display,但到目前为止我没有发现任何东西可以让 NSView 窗口调用 drawRect。

我对 OS X 编程相当陌生,并且很感激您可以提出的任何提示。

谢谢,汤姆杰弗里斯

0 投票
3 回答
3708 浏览

ios - iOS:如何在弹出其子 UIViewController 后“刷新” UIViewController?

在我的应用程序中,我使用的是 UINavigationController。我有一个“父” UIViewController 和一个“子” UIViewController 在堆栈上运行。用户可以对孩子进行一些稍后假设会影响父母的设置。我使用 NSUserDefaults 来保存和检索数据,根据 NSLog 似乎工作正常。

我不清楚的是,一旦我从孩子那里回来,我应该如何“刷新”数据。

让我更具体一点:在孩子中有一个“返回”按钮,它执行 popViewControllerAnimated,然后我们回到父级。我想重新运行 viewDidLoad 中的所有方法,以便使用从 NSUserDefaults 数据中获得的更改设置父视图字段。

  1. 我应该在父方法中的哪个位置告诉视图“刷新”?
  2. 如何执行此刷新操作?我应该再次调用 viewDidLoad 吗?我读到了一个叫做 setNeedsDisplay 的东西,如果那是我应该使用的东西,语法是什么(是“[self.view setNeedsDisplay]”还是其他东西)?

任何人都可以指导和详细说明吗?

0 投票
1 回答
368 浏览

uiview - CATiledLayer 重绘底层子视图

我有两个子类 UIView 作为 UIViewController 视图的子视图。第一个 UIView 将 CATiledLayer 作为图层类。并将其置于背景上。第二个 UIView 首先放在上面。我想用 CATiledLayer 重绘 UIView。我尝试调用 [myView.layer setNeedsDisplay] 但它不起作用。

0 投票
1 回答
4940 浏览

ios - setNeedsDisplay 是立即生效还是只是排队等候?

这里有人知道是否setNeedsDisplay会导致立即drawRect呼叫和立即更新屏幕吗?或者它仅仅是一个排队的请求?谢谢。