我有CALayer
需要显示视频帧。每次渲染一个帧(作为CGImageRef
)时,都会调用此方法:
- (void)displayFrame:(CGImageRef)frame {
[view layer].contents = (id)frame;
}
奇怪的是,这首先不会显示任何内容。每次view
调整大小时,都会显示一个新的frame
,但会再次调整view
的大小。
我该如何解决这个问题?
答案 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];
为我做了诀窍。我必须弄清楚使用这种方法显示文本的性能(如果有的话)。