Ich habe viele Threads zu diesem Thema gesehen, aber keiner behandelt meinen Fall (denke ich).
Mein Fall sollte einfach sein. Ich habe eine benutzerdefinierte UIView
in meinem Controller. Von meinem Controller aus verwende ich [self.myView setNeedsDisplay]
und es funktioniert perfekt.
Ich habe Probleme, wenn ich versuche, dies von innerhalb der UIView
selbst aufzurufen... Ich habe eine Benachrichtigung aus einer anderen Klasse gesendet, die von meiner Ansicht empfangen wird (das funktioniert) mit den übermittelten Informationen, ich aktualisiere interne Eigenschaften dieser Ansicht und dann rufe ich [self setNeedsDisplay]
auf, in der Hoffnung, dass mein Bildschirm mit den neuen Zuständen aktualisiert wird, aber nichts passiert. Ich habe ein NSLog
in meiner drawRect
-Methode verwendet, und es wird zu diesem Zeitpunkt nicht aufgerufen. Es wird nur aufgerufen, wenn meine Controller-Klasse setNeedsDisplay
aufruft, und wenn das passiert, wird die Aktualisierung, die zuvor hätte passieren sollen, auf dem Bildschirm angezeigt... Ich weiß nicht, warum es nicht vorher aktualisiert wird...
Hier sind einige Codezeilen:
Mein Controller fordert ein Update an: (funktioniert gut!)
- (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];
}
Meine Benachrichtigungsmethode versucht, meine Zeichnung zu aktualisieren: (funktioniert nicht!)
- (void) receiveTestNotification:(NSNotification *) notification
{
NSDictionary *userInfo = notification.userInfo;
DTINode *notificationNode = [userInfo objectForKey:@"myNode"];
NSLog("Ich bin hier!");
for (DTINode *node in self.nodesToDraw)
{
NSLog("Auch hier");
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("Sollte JETZT NEU GEZEICHNET werden!"); // Es druckt das, aber es wird nichts gezeichnet!
}
}
}
Ich kopiere meinen drawRect
nicht hierhin, weil er funktioniert. Das Problem ist, dass er nicht von UIView setNeedsDisplay
aus aufgerufen wird!
Hat jemand eine Idee, warum das nicht funktioniert????