问题标签 [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.
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:已解决
我已将代码放入一个新方法中,调用此方法解决了我的问题。
objective-c - UIScrollView setNeedsDisplay 不工作,还是别的什么?
这个问题的最终解决方案在问题下方给出
我的目标是创建一个图像选择器,它最初在滚动视图内创建每个图像视图,然后将该图像视图的引用传递给一个方法,该方法将使用适当的图像异步更新 imageview.image。
这工作得很好。
我遇到的问题是滚动视图仅在方法结束时批量显示图像视图,而我希望它们在创建时一个接一个地打印(图像是否可用)。
如果我触摸滚动视图来滚动,它会按照我想要的方式工作,但是如果我根本不触摸,屏幕会保持白色,直到所有图像(不仅仅是图像视图)都完成加载。
我已经尝试将 setNeedsDisplay 放置在任何地方,每个视图,包括 self.view、scrollview 和每个单独的 imageview。这是怎么回事?
编辑于 2012 年 2 月 7 日下午 3:26
这些更改修复了与问题中给出的代码相关的所有问题
感谢@Eugene 为我指明了正确的方向
ios - cellForRowAtIndexPath:setNeedsDisplay 不适用于在后台下载的图像,即使在主线程上调用它也是如此
我已经看到一些帖子建议在块内使用类似以下的内容异步下载图像,以便setNeedsDisplay
在主线程上调用并让它更快地显示。
我正在尝试这个,如下所示,但图像在下载后不会立即显示。通常有大约 4 - 5 秒的延迟。我知道这一点,因为如果我选择任何特定的行,图像就会出现,而其他的仍然没有显示。
顺便说一句,下面的NSLog(@"background");
andNSLog(@"main thread");
调用按以下顺序打印,用于调用最初的 6 个单元格,我认为这是我所期望的。但仍然不起作用:
有任何想法吗?
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
iphone - iOS:CGContextRef drawRect 不同意输入
背景:当用户触摸某处时,我想绘制块。如果块在那里,我想擦除它。我通过使用NSMutableArray
来跟踪块应该去的点来管理块。每次用户触摸时,它都会判断触摸位置是否已经包含一个块,并相应地管理数组。
问题:我收到了一个非常奇怪的反馈。首先,数组中的所有内容都按我的意愿工作。当用户想要擦除一个块时,问题就出现了。虽然正确维护了数组,但绘图似乎忽略了数组中的更改。除了最后一个点,它不会删除任何东西。甚至当用户点击其他地方时,闪烁也会打开和关闭。
这是代码:
scale
定义为 16.
pointArray
是视图的成员变量。
测试:您可以将其放入任何 UIView 并将其添加到 viewController 以查看效果。
问题:如何让绘图与数组一致?
更新 + 说明:我知道这种方法的成本,但它只是为我创建一个快速的数字。它不会在实际应用中使用,因此,请不要挂断它的价格。我创建此功能只是为了在我绘制的图形的NSString
( ) 中获取值。@"1,3,5,1,2,6,2,5,5,..."
当我实际使用它而不重绘时,这将变得更有效率。请坚持提出的问题。谢谢你。
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
吗?到目前为止,我仅将这种方法用于弹出窗口。
ios - 我什么时候需要在 iOS 中调用 setNeedsDisplay?
在创建 iOS 应用程序时,我对何时需要调用感到困惑setNeedsDisplay
?我知道这与更新/重绘 UI 有关;但是,每次我改变任何观点时都需要调用它吗?
例如,我是否需要调用它:
- 以编程方式更改文本字段中的文本后
- 更改视图的背景时?
- 当我在 viewDidLoad 中进行更改时?
- 在 viewDidAppear 中怎么样?
有人可以给我一些关于何时使用此方法的一般准则吗?
ios - iOS setNeedsDisplay 在多个区域
我有一个自定义视图,其中有一个钢琴键盘。每个键都作为单独的调用绘制,因此我只能绘制需要重绘的键。该视图支持多点触控,因此可以同时按住多个键。
每个键的绘制都有些昂贵,因此每当在视图上检测到触摸时,我都会将特定区域传递给 setNeedsDisplay 以避免重新绘制整个视图(这会产生明显的延迟)。
为了处理多个触摸,我遍历接收到的触摸集合,检查每个触摸是否在一个键内,如果是,更新它并使用该键的矩形调用 setNeedsDisplay。简而言之,在一个函数中多次调用 setNeedsDisplay,但每次使用不同的 rect。
我期望的行为是 drawRect 将被调用多次不同的脏区域,但是,似乎如果我同时按下最左边和最右边的键,则重新绘制整个视图,而不仅仅是最左边和最右边的键(如中间的所有键都被不必要地重绘)。
我能做些什么来实现我想要的?我只想绘制被触摸的键,而不是两个脏键之间的所有键。
objective-c - 大型 UIView 上的 setNeedsDisplay 导致
我有一个非常大的 UIView,大小约为 3000x3000。在这个大视图中,我在 iPad 上使用触控笔或手指进行了一些自由形式的绘图。这是我的触摸开始和移动方法的代码。
这是我的触摸移动方法,这似乎是导致问题的原因,因为应用程序调用 setNeedsDisplay 调用它的次数不够
现在这是我的 drawRect 方法,它显示绘图
在自由形式模式下绘图时,该应用程序令人难以置信地滞后。我相信这是因为视图太大并且每次调用 touchesmoved 方法时 setNeedsDisplay 都会重新加载整个视图。有没有一种方法可以加快 setNeedsDisplay 方法的速度,这样自由形式的绘图就不会在 iPad 上滞后。我可以只针对发生绘图的上下文而不是重新加载整个内容吗?当我将大小调整到大约 1000x1000 时,它没有滞后问题。
感谢您对此事的任何帮助。
编辑尝试使用 -SetNeedsDisplayinRect
UIView 包装在 UISCrollview 中,代码如下。
这种方法也无济于事。
如果您能提供帮助,再次感谢。
cocoa - drawRect: 并不总是在 setNeedsDisplay:YES 之后调用,当父视图是 layer-backed 时
我有一个基本的 Cocoa 应用程序,它有一个自定义NSCollectionView
覆盖drawRect:
以绘制红色背景(用于说明目的)。
我注意到在看似随机的时间,drawRect:
虽然我调用了setNeedsDisplay:YES
. 其他时候它工作并且集合视图具有红色背景。
我花了几个小时,但后来我终于注意到在视图层次结构的高处,其中一个父视图是一个支持层的视图(我在 Interface Builder 中检查了“核心动画层”以向元素添加阴影) .
将该父视图更改为不使用图层支持立即解决了问题,drawRect:
然后总是按预期调用。
令我困惑的是,在父视图上启用图层支持时,drawRect:
有时会调用它,但并非总是如此。
如果父视图是图层支持的,我是否应该假设我不能在任何子视图中可靠地覆盖? drawRect: