问题标签 [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 投票
3 回答
32826 浏览

ios - 重新加载/刷新子视图 - setNeedsDisplay 不起作用

我遇到了 setNeedsDisplay 的问题。我有一个带有很多子 UIView 的 UIView,它们是在 Inteface Builder 中创建的。我还有一个带有 IBAction 的按钮。在这个 IBAction 中,我想重绘/重新加载所有 UIViews(或所有 UIElements,如 UILabel、UIWebView 等..)

我正在这样做,这对我不起作用,不知道为什么..:

重绘/重载/刷新所有 UIElements/UIViews 和 Subviews 怎么办?

编辑1:

我如何加载视图:

detailviewcontroller 没有 viewcontroller,只有 uiviews,这里是层次结构:

  • UIView
    ——UIViewContainer
    ——UIView0
    ——UIView1
    ——UIViewStapel

我期望做什么:

*我不想重置 UIView,我想更改背景和它们的内容。*

我的详细视图中有很多子视图(uiviews),请参见上面的层次结构。我在 UIViews 中显示内容,内容来自 coreData。
view1 包含 coreData 的当前行。
view0 包含上一行 coreData。
viewStapel 包含下一行 coreData。

使用 IBAction 我想迭代 coreData 行,如果调用该操作,则在当前显示下一行..等等..

在 Log 中,数据会发生变化,但不会显示在 UIViews 中。原因是我需要重绘或重新加载或类似的东西,以显示当前数据。

编辑2:已解决
我已将代码放入一个新方法中,调用此方法解决了我的问题。

0 投票
2 回答
1629 浏览

objective-c - UIScrollView setNeedsDisplay 不工作,还是别的什么?

这个问题的最终解决方案在问题下方给出

我的目标是创建一个图像选择器,它最初在滚动视图内创建每个图像视图,然后将该图像视图的引用传递给一个方法,该方法将使用适当的图像异步更新 imageview.image。

这工作得很好。

我遇到的问题是滚动视图仅在方法结束时批量显示图像视图,而我希望它们在创建时一个接一个地打印(图像是否可用)。

如果我触摸滚动视图来滚动,它会按照我想要的方式工作,但是如果我根本不触摸,屏幕会保持白色,直到所有图像(不仅仅是图像视图)都完成加载。

我已经尝试将 setNeedsDisplay 放置在任何地方,每个视图,包括 self.view、scrollview 和每个单独的 imageview。这是怎么回事?

编辑于 2012 年 2 月 7 日下午 3:26

这些更改修复了与问题中给出的代码相关的所有问题

感谢@Eugene 为我指明了正确的方向

0 投票
1 回答
1521 浏览

ios - cellForRowAtIndexPath:setNeedsDisplay 不适用于在后台下载的图像,即使在主线程上调用它也是如此

我已经看到一些帖子建议在块内使用类似以下的内容异步下载图像,以便setNeedsDisplay在主线程上调用并让它更快地显示。

我正在尝试这个,如下所示,但图像在下载后不会立即显示。通常有大约 4 - 5 秒的延迟。我知道这一点,因为如果我选择任何特定的行,图像就会出现,而其他的仍然没有显示。

顺便说一句,下面的NSLog(@"background");andNSLog(@"main thread");调用按以下顺序打印,用于调用最初的 6 个单元格,我认为这是我所期望的。但仍然不起作用:

有任何想法吗?

0 投票
2 回答
348 浏览

cocoa-touch - Cocoa - iOS -Does updating the text property of a UILabel require setNeedsDisplay?

I am a newbie and I have a iOS project where I am setting the text property of a UILabel field.

Question

  • Do I need to invoke setNeedsDisplayInRect for the label for the new text value to be displayed ?

My understanding based on some testing:

  • Without invoking setNeedsDisplayInRect, the the label's text was updated,
  • but I want to know if it was a coincidence or is gauranteed that the the label will display the new value without explicitly invoking setNeedsDisplay

Thanks

0 投票
2 回答
1198 浏览

iphone - iOS:CGContextRef drawRect 不同意输入

背景:当用户触摸某处时,我想绘制块。如果块在那里,我想擦除它。我通过使用NSMutableArray来跟踪块应该去的点来管理块。每次用户触摸时,它都会判断触摸位置是否已经包含一个块,并相应地管理数组。

问题:我收到了一个非常奇怪的反馈。首先,数组中的所有内容都按我的意愿工作。当用户想要擦除一个块时,问题就出现了。虽然正确维护了数组,但绘图似乎忽略了数组中的更改。除了最后一个点,它不会删除任何东西。甚至当用户点击其他地方时,闪烁也会打开和关闭。

这是代码

scale定义为 16. pointArray是视图的成员变量。

测试:您可以将其放入任何 UIView 并将其添加到 viewController 以查看效果。

问题:如何让绘图与数组一致?


更新 + 说明:我知道这种方法的成本,但它只是为我创建一个快速的数字。它不会在实际应用中使用,因此,请不要挂断它的价格。我创建此功能只是为了在我绘制的图形的NSString( ) 中获取值。@"1,3,5,1,2,6,2,5,5,..."当我实际使用它而不重绘时,这将变得更有效率。请坚持提出的问题。谢谢你。

0 投票
1 回答
248 浏览

ios5 - 重新加载并显示一个 tableView whitch 基于 MainStoryboard 中的一个视图

从上周开始我一直在寻找鞋面的解决方案,但我在互联网上没有找到解决方案。所以我想我会在这里得到帮助。

现在可能会提出问题:我有一个 MainStoryboard,其中有一个带有 View 的 ViewController。在那个视图上,我放了一个 tableView。视图控制器.h

ViewController.m 我已经合成了它,现在我想在显示视图时重新加载并显示它。我测试了以下没有结果的东西:[tableView reloadData]; [self.tableView reloadData]; [self.tableView setNeedsDisplay]; 如果我使用了,则会[self.view setNeedsDisplay];出现以下错误:

由于未捕获的异常“NSInternatlInconsistencyExeption”而终止应用程序,原因:“无法在包中加载 NIB:“NSBundle <...>(已加载)”,名称为“ViewController” *第一次调用堆栈:(...)终止调用抛出异常(lldb)

没错,没有NIB文件,因为我用过Storyboard。那么有人有想法吗?

我发现的唯一一件事是,如果我通过 Storyboard 中视图上的按钮重新加载视图,tableView 会重新加载 - 完全重新加载 - 但这不是解决方案。

我可以为此做点什么-(void)prepareForSegue:(UIStoryboard *)segue sender:(id)sender吗?到目前为止,我仅将这种方法用于弹出窗口。

0 投票
5 回答
47702 浏览

ios - 我什么时候需要在 iOS 中调用 setNeedsDisplay?

在创建 iOS 应用程序时,我对何时需要调用感到困惑setNeedsDisplay?我知道这与更新/重绘 UI 有关;但是,每次我改变任何观点时都需要调用它吗?

例如,我是否需要调用它:

  • 以编程方式更改文本字段中的文本后
  • 更改视图的背景时?
  • 当我在 viewDidLoad 中进行更改时?
  • 在 viewDidAppear 中怎么样?

有人可以给我一些关于何时使用此方法的一般准则吗?

0 投票
2 回答
432 浏览

ios - iOS setNeedsDisplay 在多个区域

我有一个自定义视图,其中有一个钢琴键盘。每个键都作为单独的调用绘制,因此我只能绘制需要重绘的键。该视图支持多点触控,因此可以同时按住多个键。

每个键的绘制都有些昂贵,因此每当在视图上检测到触摸时,我都会将特定区域传递给 setNeedsDisplay 以避免重新绘制整个视图(这会产生明显的延迟)。

为了处理多个触摸,我遍历接收到的触摸集合,检查每个触摸是否在一个键内,如果是,更新它并使用该键的矩形调用 setNeedsDisplay。简而言之,在一个函数中多次调用 setNeedsDisplay,但每次使用不同的 rect。

我期望的行为是 drawRect 将被调用多次不同的脏区域,但是,似乎如果我同时按下最左边和最右边的键,则重新绘制整个视图,而不仅仅是最左边和最右边的键(如中间的所有键都被不必要地重绘)。

我能做些什么来实现我想要的?我只想绘制被触摸的键,而不是两个脏键之间的所有键。

0 投票
2 回答
837 浏览

objective-c - 大型 UIView 上的 setNeedsDisplay 导致

我有一个非常大的 UIView,大小约为 3000x3000。在这个大视图中,我在 iPad 上使用触控笔或手指进行了一些自由形式的绘图。这是我的触摸开始和移动方法的代码。

这是我的触摸移动方法,这似乎是导致问题的原因,因为应用程序调用 setNeedsDisplay 调用它的次数不够

现在这是我的 drawRect 方法,它显示绘图

在自由形式模式下绘图时,该应用程序令人难以置信地滞后。我相信这是因为视图太大并且每次调用 touchesmoved 方法时 setNeedsDisplay 都会重新加载整个视图。有没有一种方法可以加快 setNeedsDisplay 方法的速度,这样自由形式的绘图就不会在 iPad 上滞后。我可以只针对发生绘图的上下文而不是重新加载整个内容吗?当我将大小调整到大约 1000x1000 时,它没有滞后问题。

感谢您对此事的任何帮助。

编辑尝试使用 -SetNeedsDisplayinRect

UIView 包装在 UISCrollview 中,代码如下。

这种方法也无济于事。

如果您能提供帮助,再次感谢。

0 投票
1 回答
1075 浏览

cocoa - drawRect: 并不总是在 setNeedsDisplay:YES 之后调用,当父视图是 layer-backed 时

我有一个基本的 Cocoa 应用程序,它有一个自定义NSCollectionView覆盖drawRect:以绘制红色背景(用于说明目的)。

我注意到在看似随机的时间,drawRect:虽然我调用了setNeedsDisplay:YES. 其他时候它工作并且集合视图具有红色背景。

我花了几个小时,但后来我终于注意到在视图层次结构的高处,其中一个父视图是一个支持层的视图(我在 Interface Builder 中检查了“核心动画层”以向元素添加阴影) .

将该父视图更改为不使用图层支持立即解决了问题,drawRect:然后总是按预期调用。

令我困惑的是,在父视图上启用图层支持时,drawRect:有时会调用它,但并非总是如此。

如果父视图是图层支持的,我是否应该假设我不能在任何子视图中可靠地覆盖? drawRect: