我正在尝试使用CGAffinetransform
实现相机缩放。变换很好,但是当我将它缩放到更大的尺寸时,它会超出我分配给AVCaptureVideoPreviewLayer
的帧。我尝试将masksToBounds
属性设置为YES
,但它没有帮助。
我可以在其框架中包含它吗?
修改
我想要的是我可以为相机预览图层指定一个特定区域,如果我对其应用缩放变换(即,预览图层的框架被展开),则指定区域之外的图层部分会被剪裁。 / p>
答案 0 :(得分:33)
你应该将你正在缩放的图层放在另一个图层中,然后屏蔽那个图层(超级图层)。同样适用于观点。
即。您有两个视图/图层:clippingView
和scalingView
其中scalingView是clippingView的子视图,clippingView是实际剪切到其边界的视图。
[clippingView addSubview:scalingView];
clippingView.clipsToBounds = YES;
或使用图层
[clippingLayer addSublayer:scalingLayer];
clippingLayer.masksToBounds = YES;
答案 1 :(得分:3)
我们发现你们都是部分正确,但我想澄清一下。
假设我们通过[self.view.layer addSublayer:previewLayer]
[self clipsToBounds]在您告诉其主要图层屏蔽边界之前不会发生任何事情。 [self.view.layer masksToBounds];
仅仅因为你的视图有一个框架,所以它的图层也没有意义它有结合。如果它没有界限那么就没有什么可以屏蔽的了。这样做self.view.layer.bounds = self.view.frame
;
所以这一切都在一起..请记住我在自己的UIView课程中这样做,所以我不需要调用self.view。
previewLayer.bounds = self.frame;
self.layer.bounds = self.frame;
self.layer.masksToBounds = YES;
previewLayer.masksToBounds = YES;
[self setBounds:self.frame];
[self clipsToBounds];
答案 2 :(得分:0)
clipsToBounds
属性应设置为YES
。