问题标签 [setneedsdisplayinrect]

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 回答
95 浏览

iphone - 如何更新辅助视图?

也许有更好的方法来设置它,所以我愿意接受建议。

但这就是我正在做的事情。我有一个主 UIView。最重要的是,我有一个 UIImageView 和另一个 UIView。当 UIImageView 改变时,我想改变第二个 UIView。所以我有一个类,IB对象的类型设置为类。在该类的 .m 中是一个绘制一些矩形的 drawRect 方法。.m 中还有一个综合的 NSMutableArray 属性。我在主视图的控制器中创建了该类的一个实例。

问题:尽管 drawRect 在应用程序启动时工作正常(如调试器中所跟踪),但当 UIImageView 更改时,我在更新 @synthesize'd 数组后在第二个视图的实例变量上调用“setNeedsDisplay”但是drawRect 不会被调用。

我认为这与实例有关。我不认为线程在这里会成为问题。我只想根据还显示的图像在屏幕的单独区域中绘制。

0 投票
1 回答
283 浏览

iphone - 为什么 drawAtPoint 在我的表格单元的内容视图中创建重复图像?

我有一个自定义滑块的视图。我们正在使用生成 UITableViewCell 实例的 TableViewController 的子类。在每个 tableViewCell 中,我们将自定义滑块(UI 视图)添加为子视图。在这里,我们有一个用作滑块控制旋钮的视图。它只是带有手势识别器的 UIView 的子类。控制旋钮类的 drawRect 方法采用 UIImage 并执行 drawAtPoint。这很好用!总结一下,我们有:

UITableView -> UITableViewCell -> UITableViewCell.contentView -> SliderView -> SliderKnob -> UIImage

当我们将表格单元格滚动出表格视图时,就会出现问题。旋钮的 UIImage 仍然存在。每次单元格出列时,我们最终都会得到剩余图像的副本。我已经设置了一些 NSLog 语句并确认在每个子视图中都调用了 drawRect。为了刷新单元格的渲染,我需要做些什么吗?我曾尝试在 UITableViewCell 的子视图上使用 setNeedsDisplay,但未能成功防止 UIImage 被复制。

0 投票
1 回答
1387 浏览

iphone - 如何使用 performSelectorOnMainThread 调用 setNeedsDisplayInRect?

如何使用 performSelectorOnMainThread 调用 setNeedsDisplayInRect?问题是正确的。我不知道如何在 performSelectorOnMainThread 方法中传递 rect。这个方法问的是NSObject,但是CGRect不是NSObject,它只是结构体*。

我需要从非主线程调用 MainThread 中的 setNeedsDisplayInRect 方法。有谁知道怎么做吗?????????提前致谢..

真的感谢。

0 投票
1 回答
355 浏览

objective-c - NSOutlineView setNeedsDisplayInRect 调用失败

我有一个使用自定义 NSCell 子类来绘制 NSProgressIndicator 的 NSOutlineView。每个 NSCell 都有一个refreshing由 NSOutlineView 委托方法设置的属性willDisplayCell:forItem:,如下所示:

每个项目实例都包含一个 NSProgressIndicator,它的启动和停止取决于该特定项目是否正在刷新。

项目 NSProgressIndicator 实例在我的 NSCelldrawInteriorWithFrame:inView:类中停止和启动,如下所示:

我遇到的问题是,尽管正确告知 NSProgressIndicators 停止,但对 stopProgressIndicator 的调用无效。这是未能触发刷新相关 NSOutlineView 行的代码。我已经手动检查了调用 rectOfRow 返回的 NSRect 并且可以确认该值是正确的。

当 NSOutlineView 完成刷新它的所有项目时,它会触发一个reloadData:调用。这是唯一似乎可靠地更新所有有问题的单元格的东西,最终删除了 NSProgressIndicators。

我在这里做错了什么?

0 投票
2 回答
2275 浏览

ios - 在 drawLayer:inContext: 期间调用 setNeedsDisplayInRect:

我在我的应用程序中使用了 CATiledLayer,因此,该图层的绘制是在后台线程中完成的。也就是说,我的委托的 drawLayer:inContext: 方法是从后台线程调用的。用于使 CATiledLayer 的部分无效的 setNeedsDisplayInRect 始终从主线程调用。

因为它们是独立线程,所以偶尔会在后台线程在 drawLayer:inContext 方法中时调用 setNeedsDisplayInRect。我注意到在这种情况下 setNeedsDisplayInRect 被忽略(drawLayer:inContext 不再被调用)。

我已经向 Apple 记录了一个错误,因为我认为这是不正确的。但我很难弄清楚如何解决这种情况。你有好主意吗?

编辑:

我使用以下代码测试了 Stanislaw 的答案:

如给定的那样,代码确实会导致绘制无限期地重复,但有时在 setNeedsDisplayInRect: 和相应的 drawLayer:inContext: 之间有长达 5 秒的延迟,其中没有其他任何事情发生。请参阅下面的日志作为示例。注意不规则的行为:在第一秒,一些图块被重绘多次,而另一些则只重绘一次。然后停顿 5 秒,循环重新开始。

这是在带有 IOS6.0 的模拟器上测试的(我选择那个版本,因为早期版本有另一个在 6.0 中修复的错误:它们有时会绘制两次相同的图块)。

0 投票
1 回答
487 浏览

ios - setNeedsDisplayInRect: 动画方法的正确使用

我有一些视图控制器,它使用我自己的视图类和 XIB 接口,所以视图从编码器初始化。在那个视图控制器中,当我移动滑块时,它会重绘矩形,在初始状态矩形是全屏的,当我将滑块向左移动时,矩形的大小会按比例变小(从全屏到 10x14 连续 4 像素间隔)。“滑块确实改变了一个值”调用了一些方法,设置新的矩形大小结束发送“setNeedsDisplay”方法。如果我更改为“setNeedsDisplayInRect:”方法,它不会更新我在屏幕上需要的所有内容,会有一些伪影。但是通过调试它会像我想要的那样更新。尝试发送不同的矩形进行更新,例如:

和其他一些,同样的故事。我的问题是,我需要在 "setNeedsDisplayInRect:" 中发送哪个矩形?

第二个问题,如何加速/优化所有故事以获得更流畅的动画和更低的成本?

0 投票
1 回答
861 浏览

objective-c - IOS 5 SetNeedsDisplayInRect 导致全屏无效

我注意到在 IOS5 第一次调用 SetNeedsDisplayInRect 时,它会导致设备刷新全屏。这与以前的 IOS 版本不同。

在我正在处理的应用程序中,我有一组需要绘制的对象(主要是矩形,具有不同的线条大小)。如果我只想重绘几个矩形,我将对象添加到“更新”-Array 并调用 SetNeedsDisplayInRect 以使矩形区域无效。

在我的drawRect-Method中,我这样确定,要么绘制完整的对象数组,要么只绘制“Update-Array”:

在我使用 IOS5 对其进行测试之前,这非常有效。事实上它仍然有效,但不是第一次调用 SetNeedsDisplayInRect:--> CGRectEqualToRect 返回总是是的。

这是为什么??我究竟做错了什么?

任何建议都非常感谢!谢谢

汤姆

0 投票
1 回答
731 浏览

ios5 - iOS5 中的 setNeedsDisplayInRect 错误?

我正在尝试setNeedsDisplayInRect:在 iOS5 中使用来优化一些绘图代码。设置很简单:我有一个 CGRect '热点'数组,用作按钮。当检测到触摸时,我找到它发生的 CGRect 并setNeedsDisplayInRect:以该矩形作为参数调用视图。所有的 CGRects 对视图都是有效的——它使用它们来进行初始绘图并且正确显示。

我所看到的(如下面的控制台转储所示)是第一次调用setNeedsDisplayInRect:将视图框架作为矩形传递,而不是我指定的矩形。随后的调用是正确的。

谁能确认这是一个错误或看到我在这里做错了什么?所有代码都在下面。 - 谢谢!

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 回答
399 浏览

ios - 创建一个复杂的 CGRect

我在该方法上绘制了一个边框为 10 像素的视图。我需要更新边框颜色并使用[self setNeedsDisplay]它来重绘视图。因为我只需要更新我想使用的边框:[self setNeedsDisplayInRect:rect]所以它只会绘制边框。

如何在没有视图其他区域的情况下仅获得边框的矩形?

谢谢沙妮