在显示图层之前应用CGAffineTransform

我试图缩放一个AVCaptureVideoPreviewLayer ,使其显示相机的“放大”预览; 我可以使用setAffineTransform:CGAffineTransformMakeScale(2.0f, 2.0f)setAffineTransform:CGAffineTransformMakeScale(2.0f, 2.0f)这个工作,但是只有在图层在屏幕上可见的时候。 也就是说,在像viewDidAppear这样的callback期间,除非我从CATransaction调用它,否则缩放转换似乎不起作用。

我真正想做的是在图层变得可见之前应用比例变换 – 例如在我初始化它并将其添加到UIView但是我所有的尝试都被certificate是徒劳的。 如果我在这一点上设置了转换,然后在可见的时候尝试读回数值,它看起来具有所需的缩放转换设置 – 但它对视图没有任何影响。 我是iOS编程的新手,所以我确定这里有一些基本的东西。 任何帮助表示赞赏!

两个简单的替代方法,一个(更好)的iOS 7.x和一个早期版本的iOS:

 float zoomLevel = 2.0f; if ([device respondsToSelector:@selector(setVideoZoomFactor:)] && device.activeFormat.videoMaxZoomFactor >= zoomLevel) { // iOS 7.x with compatible hardware if ([device lockForConfiguration:nil]) { [device setVideoZoomFactor:zoomLevel]; [device unlockForConfiguration]; } } else { // Lesser cases CGRect frame = captureVideoPreviewLayer.frame; float width = frame.size.width * zoomLevel; float height = frame.size.height * zoomLevel; float x = (frame.size.width - width)/2; float y = (frame.size.height - height)/2; captureVideoPreviewLayer.bounds = CGRectMake(x, y, width, height); }