この問題に関連する多くのスレッドを見ましたが、私のケースに対処するものはありませんでした (私は思います)。
私の場合は単純なはずです。コントローラーにカスタムUIView
があり、コントローラーから [ self.myView setNeedsDisplay
] を使用すると、完全に機能します。
自分自身の内部からこれを呼び出そうとすると問題が発生しUIView
ます...別のクラスから送信された通知があり、渡された情報とともにビュー(これは機能します)によって受信され、内部を更新しますこのビューのプロパティsetNeedsDisplay
と、新しい状態で画面を更新したい[self ] を呼び出していますが、何も起こっていません。メソッドNSLOG
内でa を使用しましたdrawRec
が、現時点では呼び出されていません。私のコントローラークラスが を呼び出すときに呼び出され、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
。問題は、 my の内部から呼び出されていないことUIView setNeedsDisplay
です !
なぜこれが機能しないのか誰にも分かりますか????