- objective-c - iOS 5 : Can you override UIAppearance customisations in specific classes?
- iphone - 如何将 CGFontRef 转换为 UIFont?
- ios - 以编程方式关闭标记的信息窗口 google maps iOS
- ios - Xcode 5 - 尝试验证存档时出现 "No application records were found"
我看到很多与此问题相关的线程,但没有一个解决我的问题(我认为)。
我的情况应该很简单,我的 Controller 中有一个自定义 UIView
,我在我的 Controller 中使用了 [self.myView setNeedsDisplay
],它运行良好。
当我尝试从 UIView
本身内部调用它时,我遇到了问题...我有一个从另一个类发送的通知,它正在被我的 View 接收(这works) 使用它传递的信息,我更新了这个 View 的内部属性,然后我调用 [self setNeedsDisplay
] 希望用新状态更新我的屏幕,但是没有任何反应,我在我的 drawRec
方法中使用了一个 NSLOG
,此时它没有被调用,它仅在我的 Controller 类调用 setNeedsDisplay
时被调用,当发生这种情况时,屏幕上会显示之前应该发生的更新......我不知道为什么之前没有更新......
下面是一些代码:
我的 Controller 要求更新:(工作正常!)
- (void)addNodeToNetwork:(DTINode *)node
{
[self.myNetwork addNodeInTheNetwork:node];
self.gridView.nodesToDraw = [self.myNetwork.nodesInNetwork copy];
CGRect tempRec = CGRectMake(node.nodePosition.x, node.nodePosition.y node.nodePosition.x, node.nodePosition.y);
NSValue *rectObj = [NSValue valueWithCGRect:tempRec]; //transforma o cgrect num objeto
[self.gridView.fatherNodes setValue:rectObj forKey:node.nodeName];
[self.gridView setNeedsDisplay];
}
我的通知方法试图更新我的绘图:(不工作!)
- (void) receiveTestNotification:(NSNotification *) notification
{
NSDictionary *userInfo = notification.userInfo;
DTINode *notificationNode = [userInfo objectForKey:@"myNode"];
NSLog(@"Im Here!");
for (DTINode *node in self.nodesToDraw)
{
NSLog(@"Here too");
if(node.nodeName == notificationNode.fatherNode)
{
CGRect temp = CGRectMake(notificationNode.nodePosition.x, notificationNode.nodePosition.y, node.nodePosition.x, node.nodePosition.y);
NSValue *tempObj = [NSValue valueWithCGRect:temp];
[self.fatherNodes setObject:tempObj forKey:notificationNode.nodeName];
[self setNeedsDisplay];
NSLog(@"Should REDRAW NOW!"); // It print this but no drawing is made!
}
}
}
我没有在这里粘贴我的 drawRect
因为它有效,问题是它没有从我的 UIView setNeedsDisplay
中调用!
有人知道为什么这不起作用吗????
最佳答案
经过大量测试,我看到了一些与线程相关的东西,而且 setNeedsDisplay 应该只在主线程中调用...此外,我从来没有在这个类中启动一个单独的线程,引发通知的类在辅助线程中...显然这是导致问题的原因...
为了解决它,我只是强制在主线程中调用 setNeedsDisplay..
dispatch_async(dispatch_get_main_queue(), ^{
[self setNeedsDisplay];
});
swift 3:
DispatchQueue.main.async { [weak self] in
self?.setNeedsDisplay()
}
关于ios - SetNeedsDisplay 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13916331/
在我的代码中,我想要“动画”绘制一条线的延迟,因此在向 View 添加新线后,我调用 setNeedsDisplay - 一次就可以正常工作。 在drawRect方法中,我绘制线条并调用线条的方法来增
我正在尝试使用 MonoTouch 创建自定义 ProgressBar。我创建了一个用计时器重新绘制线条的类。我的问题是,当调用 SetNeedsDisplay 时, View 不会自行重绘。仅当提供
我注意到 Mac OS X 10.7 上基于 Cocoa 的应用程序存在一个奇怪的问题。由于某种原因(这里并不重要),有时我必须在自定义 View 的 drawRect 方法之外进行绘制。 我必须在我
我正在运行一个 Parse 程序,该程序获取数据并使用“findObjectsInBackgroundWithBlock”从中创建对象。完成后,我更新 self ,然后调用“[self.tableVi
每次使用 setNeedsDisplay 调用 drawRect 时,我都会显示大量图像。问题是导致滞后导致每次我调用 dracRect 时,我都会重新绘制每个图像(数千张)。 有没有办法不重绘所有图
下面的方法是在非主线程上调用的,具体来说,是在录音音频队列回调中 - (void)myMethod { //... dispatch_async(dispatch_get_main_queue(),
我最近开始学习在 View 上绘制核心图形,但每次调用 setNeedsDisplay 时,该方法都会运行,但不会触发 drawRect。在我的项目中,我在 View Controller 上有一个
我有一个自定义 View ,其中绘制了一个钢琴键盘。每个键都作为单独的调用绘制,因此我只能绘制需要重绘的键。该 View 支持多点触控,因此可以同时按住多个键。 每个键的绘制成本都有些高,因此每当在
在我的程序中,我使用 slider 更改当前所选颜色的 alpha 级别。 当 slider 更改其值时,它调用我的 setColor() 方法来更新使用新的 alpha 值更新当前颜色并更新显示当前
我正在 UIContainerView 中创建 subview ,它属于下面描述的类。这些值正确地打印到终端窗口,但实际上并没有显示在我定义的 subview 中。我认为 setNeedsDispla
我正在尝试重新加载 UIView。实际上我得到一个错误 Cannot convert value of type 'HomeViewController' to expected argument t
我对 setNeedsDisplay 更新 UIView 的不同用法感到困惑?当我尝试使用: [self.view setNeedsDisplay:YES]; 我发现我必须忽略参数才能使其适用于 UI
这里有人知道 setNeedsDisplay 是否会立即调用 drawRect 并立即更新屏幕吗?或者它只是一个排队的请求?谢谢。 最佳答案 View 直到下一个绘图周期才真正重绘。这只是通知系统应该
我看到很多与此问题相关的线程,但没有一个解决我的问题(我认为)。 我的情况应该很简单,我的 Controller 中有一个自定义 UIView,我在我的 Controller 中使用了 [self.m
使用drawRect、setNeedsDisplay和layoutSubViews等方法有什么基本规则吗?我相信它们会对应用程序性能产生不利影响。这些消息有任何首选替代方案吗? 最佳答案 虽然这不是
我有一个更新 View 的后台任务。该任务调用 -setNeedsDisplay 来绘制 View 。 这有效: - (void) drawChangesTask; { NSAutorelea
我的 ui 结构类似于 NSWindow -> NSViewController -> NSView(parent) -> NSView(target view)。目标 View 是从 XIB 文件中
我正在尝试制作一个非常简单的绘画应用程序(Cocoa)。在我的自定义 View 中,我有我的drawRect:方法,它在光标位置创建一个矩形: - (void)drawRect:(NSRect)rec
我有一个仅绘制的 UIView 派生 View 一次并且从未更新。 调用[self setNeedsDisplay]没有效果。什么可能导致这种情况? 绘图代码是否在无关紧要 drawRect: , 或
我正在尝试创建一个循环进度指示器。不幸的是,仅从 setNeedsDisplay 第一次和最后一次调用 drawRect 例程,它不会创建我正在寻找的渐变填充模式。我创建了一个 UIView 子类,在
我是一名优秀的程序员,十分优秀!