问题标签 [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.
objective-c - 在日期更改时触发重新显示
这可能是一个简单的问题,但我是新手,所以我画了一个空白。
我有一个 2D 图形应用程序,其图形(在 drawRect 中实现)取决于日期。当日期改变时,图形改变,所以我想我需要打电话
当日期改变时。我看过计时器的代码,但这似乎不是计时器类型的场景。我将如何检查本地日期是否已更改,以及将该代码放入哪个类?我认为它会在我的主视图中放入 .m 文件中。
除了在日期更改时自动触发之外,最终,应用程序还需要在用户输入时触发(可能是某一天前进或后退的按钮或日期选择器选择时)。
图形渲染得很好,但我没有编写任何日期触发器,因此虽然 drawRect 代码是特定于日期的,但它不会在日期更改时更改。
PS我上面的基本问题已经得到解答,但是现在我去实施它,我意识到我还有另一个问题。我应该在某处有一个属性来跟踪当前显示其配置的日期。显而易见的想法是向持有 NSDate 对象的主视图添加一个属性。但是按照我编写代码的方式,计算是通过子视图类中的方法完成的。那么问题来了,如何从子视图更新主视图的 NSDate 属性。另一种方法是将 NSDate 属性添加到子视图,但是有多个这样的子视图,这似乎是多余的。对此有何看法?
objective-c - setNeedsDisplay 未按预期在子视图中触发 drawRect
我正在苦苦挣扎setNeedsDisplay
。我认为它应该触发对它被调用drawRect:
的视图的调用,如果它在视图的范围内,那么它下面的层次结构,但我发现情况并非如此。这是我的设置:
从应用程序委托中,我创建了一个大小为正方形的视图,基本上覆盖了整个屏幕空间。这种观点称为TrollCalendarView
。TrollCalendarView
除了由指南针触发的旋转之外,没有什么事情发生。
有 7 个TrollCalendarView
被调用的子视图,PlatformView
旨在包含 2D 绘图对象,这些对象TrollCalendarView
以 7 面排列的中心排列。因此,当 iPad 旋转时,这 7 个视图会旋转,因此它们始终与基本方向一致。
每个PlatformView
子视图包含 3 个子视图,称为Tower
. 每个塔都包含在drawRect:
.
所以,总而言之,我有TrollCalendarView
empty drawRect:
、 subviewsPlatformView
和Platformview
-> Tower ,每个都有 drawRect 实现。此外,Tower 位于 Platform 的范围内,Platform 位于 TrollCalendarView 的范围内。
在TrollCalendarView
我添加了一个滑动识别器。当我刷卡时,属性会更新,我打电话[self setNeedsDisplay]
但似乎什么也没发生。我将 NSLog 条目添加到drawRect:
每个视图中的方法中,并且仅TrollCalendarView
drawRect:
调用该方法。具有讽刺意味的是,这是一个其drawRect
方法将为空的视图。
没有xib文件。
我需要做什么来确保drawRect
调用其他子视图中的方法?是否有文档描述了可能影响这一点的所有细微差别?
iphone - setNeedsDisplay 不会调用 drawRect
重要的:
我已经发现了问题,但版主出于某种原因删除了它:
我尝试直接从按钮调用该函数,而不是在视图控制器中使用该函数。
我仍然不完全理解为什么它不起作用,所以我会接受这个问题的任何答案。
主帖
按下 UIButton 后,我正在尝试做一些绘图。我的绘图是在 UIView 的子类中完成的。我的 ViewController 中有这个子类的实例。我的 ViewController 中还有一个 UIButton 调用子类的函数。在我调用的那个函数中
当我加载我的应用程序时,drawRect 在视图加载时被调用一次,但永远不会再次调用,尽管每次按下按钮时都会调用 setNeedsDisplay。我查看了许多类似的问题,但没有找到解决方案。
我将在这里发布我的所有代码:
AEViewController.h
AEViewController.m
AEGraphView.h
AEGraphView.m
nsview - 仅在 10.8 下应用 CIFilter 后不会调用 NSView 的 drawRect
我有一个带有几个子视图的 NSView(我们称之为主视图)。其中一个子视图具有基于时间(通过计时器调用)的动画,该动画在其 drawRect 方法中完成。我还对主视图应用了一些 CIFilter 效果。
在 10.6.x 和 10.7.x 下所有作品都按预期工作(即我看到我的动画正在发生并应用了过滤器)。
该问题仅在 10.8 下出现 - 动画在我将过滤器(使用 setContentFilters: 和 setWantsLayer:) 应用到主视图后立即停止,并且仅在我删除过滤器后恢复(使用 setContentFilters:nil)。当应用过滤器时,我的子视图的 drawRect 方法甚至不会被调用......
如果有人能对这种情况有所了解,我将不胜感激。
谢谢你。
objective-c - setNeedsDisplay:NO 有什么用吗?
在 Cocoa 中,当我们想要重绘视图时,我们会向视图发送一条setNeedsDisplay:
消息,告诉视图重绘自身,并带有 YES 参数。我想知道是否在任何情况下您想要发送 view setNeedsDisplay:NO
,例如多线程环境,如果发送 view a setNeedsDisplay:YES
,那么在 with 之后立即再次设置它setNeedsDisplay:NO
会使视图重绘本身。如果没有理由调用setNeedsDisplay:NO
,那么为什么要创建这样一个乏味的方法,他们可以在其中实现类似的东西[view redrawView]
objective-c - UITableView setRowHeight 如何提交更改
我有一个设计,其中UITableViewCell
s 包含一个UIImageView
. UIDeviceOrientationDidChangeNotification
该图像在纵向或横向中应该具有相同的比例,这就是为什么我有一个在界面方向更改时使用通知调用的方法。
如果未注释该行,则重绘视图并正确设置行高。如果没有,即使使用[self.tableView setNeedsDisplay]
或[self.tableView setNeedsLayout]
不使用属性的新值。
如何强制重新加载 UI 以便应用新值?
它使用了一段时间,-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
因为该rowHeight
属性是在界面旋转并重绘之前设置的,但由于一些奇怪的原因,这个方法不再被调用......
谢谢你的帮助 !
objective-c - 目标 C:实现 drawRect
我有一个非常简单的项目,涉及使用 drawRect 绘制形状,但我不相信我的 drawRect 函数实际上被调用了。这是代码。(其他一切都只是“单一视图应用程序”的默认设置。)
任何建议都会很棒——感谢阅读!
ios - iOS:如何让后台线程在主线程上重绘视图
我的应用程序将查询数据库 50 次,然后通过将正确的 UIImageView 添加到另一个 UIImageView 来做出相应的反应,然后我希望应用程序在每个循环中立即显示。
唉,经过很多个晚上,我都没有让它工作。应用程序不会立即显示 UIImageView。话虽如此,当我在循环中放大或缩小时,UIImageViews 会出现!我肯定错过了什么...
到目前为止,除了最后一部分 [UIScrollView performSelector....
请帮助并提前感谢您。
objective-c - CALayer setNeedsDisplay 不能用?
我的类是一个CALayer
子类,我通过添加了一个观察者NSNotificationCenter
,当捕捉到消息时,它将运行如下函数:
但这不起作用,有人可以帮忙吗?
ios - SetNeedsDisplay 不工作
我看到了许多与此问题相关的线程,但没有一个解决我的情况(我认为)。
我的情况应该很简单,我的控制器中有一个自定义UIView
,从我的控制器中,我使用 [ self.myView setNeedsDisplay
] 并且它运行良好。
当我尝试从内部调用它时遇到问题UIView
......我有一个通知正在从另一个类发送,并且我的视图正在接收它(这有效)它传递的信息,我更新内部这个视图的属性,而不是我调用 [self setNeedsDisplay
] 希望用新状态更新我的屏幕,但没有发生任何事情,我NSLOG
在我的drawRec
方法中使用了 a,此时它没有被调用,它只是当我的控制器类调用时调用setNeedsDisplay
,当发生这种情况时,屏幕上会显示之前应该发生的更新......我不知道为什么它之前没有更新......
下面是一些代码:
我的控制器要求更新:(工作正常!)
我的通知方法试图更新我的绘图:(不工作!)
我没有drawRect
在这里粘贴我的,因为它有效,问题是没有从我的内部调用UIView setNeedsDisplay
!
任何人都知道为什么这不起作用????