我看到與此相關的問題很多線程,但沒有解決我的情況(我認爲)。SetNeedsDisplay不工作
我的情況應該很簡單,我的控制器中有一個自定義的UIView
,從我的控制器,我使用[self.myView setNeedsDisplay
],它的工作原理非常完美。
我有問題,當我試圖從UIView
本身內部調用此...我有一個通知從另一個類發送,並且它正在被我的View(這工作)與它的信息接收通行證,我更新這個觀點的內在性能和比我打電話的[自setNeedsDisplay
]希望有我的屏幕,新的狀態更新,但什麼也沒發生,我用我的NSLOG
方法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
這裏,因爲它的工作原理,問題是,是不是從我UIView setNeedsDisplay
內部調用!
任何人有,爲什麼這是行不通的任何想法????
不上的iOS 9.3.1 – Idan
工作,它在iOS的9.3工作。 1對我來說。問題出在我在另一個線程上,就像解決方案所說的那樣。 –