gpt4 book ai didi

ios - 在显示层之前应用 CGAffineTransform

转载 作者:行者123 更新时间:2023-11-28 18:33:58 25 4
gpt4 key购买 nike

我正在尝试缩放 AVCaptureVideoPreviewLayer,以便它显示来自相机的“放大”预览;我可以使用 setAffineTransform:CGAffineTransformMakeScale(2.0f, 2.0f) 来完成这项工作,但仅当图层在屏幕上可见时。也就是说,缩放变换似乎不会生效,除非我在像 viewDidAppear 这样的回调期间调用它(从 CATransaction 中)。

我真正想做的是在层变得可见时应用比例变换——例如在我初始化它并将其添加到 UIView 时——但我所有的尝试都被证明是徒劳的。如果我在此时设置变换,然后在它可见时尝试读回该值,它似乎确实具有所需的比例变换集——但它对 View 没有任何影响。我是 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);
}

关于ios - 在显示层之前应用 CGAffineTransform,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22799110/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com