【问题标题】:CALayer content goes out of bounds - iOSCALayer 内容越界 - iOS
【发布时间】:2012-12-23 11:44:31
【问题描述】:

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

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

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

【问题讨论】:

    标签: ios transform calayer scale


    【解决方案1】:

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

    假设我们通过 [self.view.layer addSublayer:previewLayer] 向视图添加了类似 AVCaptureVideoPreviewLayer 的内容

    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];
    

    【讨论】:

    • 这正是我想要的。即使我有一个自定义 UIView,我也想使用 AVFoundation 展示一个相机。谢谢!
    【解决方案2】:

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

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

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

    或使用图层

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

    【讨论】:

    • 我尝试添加一个单独的视图,(UIImageView 由于某种原因,但我想这不重要)并添加了一个子层作为我设置为 @987654326 的子层的 previewLayer @。我设置了masksToBounds' as YES`,但它仍然超出范围
    • 我所做的是,我制作了一个视图,其中包含我希望预览层所在的框架。我将其属性 clipsToBounds 设置为 YES。这就是全部了。 Doc 说,如果此属性设置为 Yes,则视图的所有内容都将位于指定的框架内。其实我以前从来没有遇到过这处房产。
    【解决方案3】:

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

    【讨论】:

    • 有什么特别的理由改变接受的答案吗?你基本上和我说的一样。
    • 1) 你的答案在此之前不是公认的答案,可能是因为我当时不明白。混淆了图层和视图。 2) 昨天看了我的答案,发现没有接受的答案,所以我接受了自己的...
    • 但是现在我看到你的被接受了。所以,犯了一个错误。
    • 因此,您必须进行更改。我有完全相同的问题。该层变得比框架本身大。我设置了一个 NSLog 来验证视图框架本身没有变大。即使我将视图上的 clipsToBounds 设置为 yes,并且在预览层上将 masktobounds 设置为 yes...预览层仍在外面。
    猜你喜欢
    • 1970-01-01
    • 2015-08-19
    • 1970-01-01
    • 1970-01-01
    • 2015-06-22
    • 1970-01-01
    • 2021-10-06
    • 1970-01-01
    • 2012-04-21
    相关资源
    最近更新 更多