gpt4 book ai didi

ios - 在哪里设置 CGAffineTransformMakeScale(2, 2);

转载 作者:行者123 更新时间:2023-11-29 04:04:00 25 4
gpt4 key购买 nike

我正在使用最新的 SDK 开发 iOS 应用程序。

我这样创建一个AVCaptureVideoPreviewLayer:

// Create the preview layer
_videoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:_captureSession];
[_videoPreviewLayer setFrame:self.view.bounds];
_videoPreviewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
[self.view.layer insertSublayer:_videoPreviewLayer atIndex:0];

现在我想这样做:

_videoPreviewLayer.affineTransform = CGAffineTransformMakeScale(2, 2);

但是如果我把它放在 [_videoPreviewLayer setFrame:self.view.bounds]; 之前,我得到的结果与放在后面的结果不同。

我必须在哪里应用比例?

而且,如果我想设置CGAffineTransformMakeRotation(-M_PI_2);//-90 度,我必须在哪里做?

最佳答案

您不应该在变换不是标识的 View 上使用 setFrame。根据Apple关于UIView的frame属性的文档:

If the transform property is not the identity transform, the value of this property [frame] is undefined and therefore should be ignored.

在 UIView.h 中,frame 属性上方

do not use frame if view is transformed since it will not correctly reflect the actual location of the view. use bounds + center instead.

因此,如果您在此代码中改用 setBounds 和 setCenter 而不是 setFrame,您可能会获得所需的一致结果。

直接回答问题:如果您也使用 setFrame,则没有正确的位置可以放置这些变换(缩放或旋转)。如果您使用 setBounds 和 setCenter,那么无论您在 setBounds/setCenter 之前还是在 setBounds/setCenter 之后应用变换,您都会得到相同的结果。

编辑:VansFannel 指出这是一个 CALayer,而不是 UIView,因此上述评论并不真正适用。我离开它们是为了不剥夺 VansFannel 的评论的上下文,也是因为它仍然是对 UIView 的一个很好的警告

现在,对于 CALayers,如果您设置帧(如 [_videoPreviewLayer setFrame:self.view.bounds]),即使 _videoPreviewLayer 具有非身份转换,也会导致 _videoPreviewLayer 的实际渲染帧为 self.view.bounds。重要的是要记住,CALayer 的框架实际上是一个派生属性。它源自图层的边界、位置、 anchor 和变换。当您使用 setFrame 时,QuartzCore 将计算出一个边界和位置,以生成您在现有 anchor 和变换下传递给 setFrame 的帧。

因此,如果您希望这些转换产生任何效果,您应该将它们放在调用 setFrame 之后。如果您首先设置变换,那么 setFrame 将有效地否定它们。如果您绝对需要先设置变换,那么您必须避免 setFrame 并直接使用图层的边界和位置。

关于ios - 在哪里设置 CGAffineTransformMakeScale(2, 2);,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15483682/

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