我看到了许多与此问题相关的线程,但没有一个解决我的情况(我认为)。
我的情况应该很简单,我的控制器中有一个自定义UIView
,从我的控制器中,我使用 [ self.myView setNeedsDisplay
] 并且它运行良好。
当我尝试从内部调用它时遇到问题UIView
......我有一个通知正在从另一个类发送,并且我的视图正在接收它(这有效)它传递的信息,我更新内部这个视图的属性,而不是我调用 [self setNeedsDisplay
] 希望用新状态更新我的屏幕,但没有发生任何事情,我NSLOG
在我的drawRec
方法中使用了 a,此时它没有被调用,它只是当我的控制器类调用时调用setNeedsDisplay
,当发生这种情况时,屏幕上会显示之前应该发生的更新......我不知道为什么它之前没有更新......
下面是一些代码:
我的控制器要求更新:(工作正常!)
- (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
!
任何人都知道为什么这不起作用????