CALayer内容超出范围 - iOS

时间:2013-01-09 12:17:49

标签: ios transform calayer scale

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

我可以在其框架中包含它吗?

修改
我想要的是我可以为相机预览图层指定一个特定区域,如果我对其应用缩放变换(即,预览图层的框架被展开),则指定区域之外的图层部分会被剪裁。 / p>

3 个答案:

答案 0 :(得分:33)

你应该将你正在缩放的​​图层放在另一个图层中,然后屏蔽那个图层(超级图层)。同样适用于观点。

即。您有两个视图/图层:clippingViewscalingView其中scalingView是clippingView的子视图,clippingView是实际剪切到其边界的视图。

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

或使用图层

[clippingLayer addSublayer:scalingLayer];
clippingLayer.masksToBounds = YES;

答案 1 :(得分:3)

我们发现你们都是部分正确,但我想澄清一下。

假设我们通过[self.view.layer addSublayer:previewLayer]

向视图添加了类似AVCaptureVideoPreviewLayer的内容
  1. [self clipsToBounds]在您告诉其主要图层屏蔽边界之前不会发生任何事情。 [self.view.layer masksToBounds];

  2. 仅仅因为你的视图有一个框架,所以它的图层也没有意义它有结合。如果它没有界限那么就没有什么可以屏蔽的了。这样做self.view.layer.bounds = self.view.frame;

  3. 所以这一切都在一起..请记住我在自己的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