在调整视图大小之前,不会显示新的CALayer.contents

时间:2011-08-21 19:13:35

标签: objective-c cocoa core-animation calayer cgimage

我有CALayer需要显示视频帧。每次渲染一个帧(作为CGImageRef)时,都会调用此方法:

- (void)displayFrame:(CGImageRef)frame {
    [view layer].contents = (id)frame;
}

奇怪的是,这首先不会显示任何内容。每次view调整大小时,都会显示一个新的frame,但会再次调整view的大小。

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:5)

是否在主线程上调用了displayFrame?如果没有,那么我发现它不会总是画画。您可以尝试使用[CATransaction flush]强制更新它,如:

- (void)displayFrame:(CGImageRef)frame {
    [view layer].contents = (id)frame;
    [CATransaction flush];
}

如果这不起作用,那么您可以尝试包含图层构造代码,以帮助识别该图层的任何特性。

答案 1 :(得分:2)

您可能需要[[view layer] setNeedsDisplay]。需要通知绘图系统已经进行了更新并且需要重新绘制屏幕。调整视图大小可以做到这一点,但似乎更改图层的contents可能不会。

答案 2 :(得分:0)

使用[CATransaction flush];为我做了诀窍。我必须弄清楚使用这种方法显示文本的性能(如果有的话)。