9

我正在尝试使用CGAffinetransform. 变换很好,但是当我将其缩放到更大的尺寸时,它会超出我分配给AVCaptureVideoPreviewLayer. 我尝试将masksToBounds属性设置为YES但没有帮助。

我可以将它包含在它的框架内吗?

编辑:
我想要的是我可以为相机预览图层指定一个特定区域,如果我对其应用缩放变换(即预览图层的框架被扩展),指定区域之外的图层部分会被剪裁.

4

3 回答 3

38

您应该将要缩放的图层放在另一图层内,并改为遮盖该图层(超级图层)。同样的事情也适用于视图。

即您有两个视图/层:clippingViewscalingViewscalingView是 clippingView 的子视图,而 clippingView 是实际剪辑到其边界的视图。

[clippingView addSubview:scalingView];
clippingView.clipsToBounds = YES;

或使用图层

[clippingLayer addSublayer:scalingLayer];
clippingLayer.masksToBounds = YES;
于 2013-01-09T15:10:18.720 回答
4

我发现你们都是对的,但我想澄清一下。

假设我们通过 AVCaptureVideoPreviewLayer 添加到视图中[self.view.layer addSublayer:previewLayer]

  1. [self clipsToBounds] 在你告诉它的主层屏蔽边界之前什么都不做。[self.view.layer masksToBounds];

  2. 仅仅因为你的视图有一个框架,它的层也有,并不意味着它有边界。如果它没有界限,那么就没有什么可以掩盖的了。所以这样做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];
于 2015-01-22T00:32:22.640 回答
0

clipsToBounds我要添加图层的视图的属性应该设置为YES.

于 2013-01-10T11:59:05.230 回答