Widziałem wiele wątków związanych z tym problemem, ale żaden nie dotyczy mojej sprawy (chyba).SetNeedsDisplay nie działa
Mój przypadek powinien być prosty, mam Custom UIView
w moim kontrolerze, od kontrolera używam [self.myView setNeedsDisplay
] i działa idealnie.
Mam problemy, gdy próbuję wywołać to z wewnątrz samego UIView
... Mam powiadomienie wysyłane z innej klasy i jest odbierane przez mój widok (działa) z informacją, że przekazuje, aktualizuję wewnętrzne właściwości tego widoku i dzwonię do [self setNeedsDisplay
], który chce zaktualizować mój ekran o nowe stany, ale nic się nie dzieje, użyłem NSLOG
w mojej metodzie i nie jest to Wywoływany w tym momencie, jest wywoływany tylko wtedy, gdy moja klasa kontrolera wywołuje setNeedsDisplay
, a kiedy tak się stanie, aktualizacja, która powinna się wydarzyć wcześniej, jest pokazana na ekranie ... Nie wiem, dlaczego jej nie aktualizowanie przed ...
Oto niektóre kodu:
mojego kontrolera z prośbą o aktualizację: (! Działa OK)
- (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];
}
Moja metoda powiadomienie próbuje aktualizować mój rysunek: (nie działa!)
- (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!
}
}
}
nie jestem wklejając mój drawRect
tutaj, ponieważ to działa, problemem jest to, że nie jest wywoływana z wewnątrz mojego UIView setNeedsDisplay
!
Ktoś ma pojęcie, dlaczego to nie działa ????
nie działa na iOS 9.3.1 – Idan
To działa w iOS 9.3. 1 dla mnie. Problem polegał na tym, że byłem w innym wątku, tak jak mówi to rozwiązanie. –