在显示图层之前应用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); }