gpt4 book ai didi

ios - SetNeedsDisplay 不工作

转载 作者:技术小花猫 更新时间:2023-10-29 11:10:51 25 4
gpt4 key购买 nike

我看到很多与此问题相关的线程,但没有一个解决我的问题(我认为)。

我的情况应该很简单,我的 Controller 中有一个自定义 UIView,我在我的 Controller 中使用了 [self.myView setNeedsDisplay],它运行良好。

当我尝试从 UIView 本身内部调用它时,我遇到了问题...我有一个从另一个类发送的通知,它正在被我的 View 接收(这works) 使用它传递的信息,我更新了这个 View 的内部属性,然后我调用 [self setNeedsDisplay] 希望用新状态更新我的屏幕,但是没有任何反应,我在我的 drawRec 方法中使用了一个 NSLOG,此时它没有被调用,它仅在我的 Controller 类调用 setNeedsDisplay 时被调用,当发生这种情况时,屏幕上会显示之前应该发生的更新......我不知道为什么之前没有更新......

下面是一些代码:

我的 Controller 要求更新:(工作正常!)

- (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 中调用!

有人知道为什么这不起作用吗????

最佳答案

经过大量测试,我看到了一些与线程相关的东西,而且 setNeedsDisplay 应该只在主线程中调用...此外,我从来没有在这个类中启动一个单独的线程,引发通知的类在辅助线程中...显然这是导致问题的原因...

为了解决它,我只是强制在主线程中调用 setNeedsDisplay..

dispatch_async(dispatch_get_main_queue(), ^{
[self setNeedsDisplay];
});

swift 3:

DispatchQueue.main.async { [weak self] in
self?.setNeedsDisplay()
}

关于ios - SetNeedsDisplay 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13916331/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com