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

spu*_*fle 4 cocoa core-animation objective-c calayer cgimage

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

- (void)displayFrame:(CGImageRef)frame {
    [view layer].contents = (id)frame;
}
Run Code Online (Sandbox Code Playgroud)

奇怪的是,这首先不会显示任何东西.每次view调整大小时,frame都会显示一个新的,但直到view再次调整大小.

我该如何解决?

Jon*_*etz 5

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

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

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