1

我的类是一个CALayer子类,我通过添加了一个观察者NSNotificationCenter,当捕捉到消息时,它将运行如下函数:

- (void)setCurrentAutoValue:(NSNotification *) obj
{

     [self setNeedsDiaplay];
}

但这不起作用,有人可以帮忙吗?

4

4 回答 4

2

显然,有必要在主线程上调用 setNeedsDisplay。您可以使用该performSelectorOnMainThread方法执行此操作。例如在你的情况下:

[self performSelectorOnMainThread:@selector(setNeedsDisplay) withObject:0 waitUntilDone:NO];
于 2013-04-15T23:43:37.440 回答
0

我通过另一个线程更新我的 CALayers 时遇到了同样的问题。如果我直接在同一个线程中调用以下任何行,它就会完美地工作:

              [self setNeedsDisplay:YES];
              [self needsDisplay];
              [self.circleLayer needsDisplay];
              [self.circleLayer setNeedsDisplay];

但是当通过另一个线程调用这些时,没有任何变化。我玩了一会儿,最后使用了

              [self display];

这是唯一迫使 CALayers 更新的事情。Self 是一个 NSOpenGLView ,它包含几个层和子层。也许这会有所帮助。每个 CALayer 都有相同的可用方法。也许你应该调用显示。

于 2012-12-13T13:46:05.743 回答
0

我的问题是我只能用动画更新 CALayer,而不是通过设置它的内容(属性“路径”的 CGPath)。似乎唯一的解决方案是首先删除图层的所有动画,然后设置新路径:

[_myLayer removeAllAnimations];
UIBezierPath *newPath = ...
_myLayer.path = newPath.CGPath;
于 2013-07-17T09:06:40.953 回答
0

自我注意:或者从未设置过 CALayer 的框架。每当 CALayer 出现问题时,首先要确保它的框架!= NSZeroRect。

于 2017-05-04T13:03:49.943 回答