gpt4 book ai didi

ios - UIView 的自定义图层蒙版

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:15:49 26 4
gpt4 key购买 nike

我正在尝试为 UIView 创建图层蒙版,它将用作滑出面板。我需要的效果是一个圆形的右下角,插入大约 50 像素。到目前为止,我已经能够通过创建一个具有清晰背景颜色的 UIView xib 以及在其顶部的另一个较小的 UIView( subview )(在底部和右侧插入 50 像素)来实现这种效果。我想在不使用较小的 subview 的情况下实现这种效果。换句话说,创建一个从底部和右侧插入 50 px 的 mask ,右下角有一个圆角。

当我现在在 subview 上绘制 mask 时,它可以在我开始时的任何屏幕方向上工作,但是当设备旋转时,我得到的结果非常不一致。在我的 subview 类中,我有以下代码:

- (void)drawRect:(CGRect)rect
{
CAShapeLayer *maskLayer = [CAShapeLayer layer];
CGPathRef path = [[UIBezierPath bezierPathWithRoundedRect:[_subView bounds]
byRoundingCorners:UIRectCornerBottomRight
cornerRadii:(CGSize){150.0, 150.0}] CGPath];
[maskLayer setPath:path];
[_subView.layer setMask:maskLayer];
CGPathRelease(path);
}

我不确定问题出在哪里,但如果我可以通过使用一个带 mask 的 UIView 来实现这种效果,似乎处理它可能会更容易。下面是带有 subview 的屏幕截图。显然,我对掩蔽技术有点陌生。

图像中显示的灰色图案是主视图 Controller ,顶部是 xib 的 UIView。透明度是通过将 xib 的主视图设置为具有清晰的背景色来实现的。

enter image description here

编辑这是横向打开时的 View 。我将 UIView 的背景设置为白色,以表明它是在设备旋转时未正确呈现的 subview 。

enter image description here

旋转后,结果如下:

enter image description here

如前所述,由于主视图正确呈现,似乎更好的方法是创建一个实现类似效果的蒙版,但不确定,这就是我来这里的原因!

希望我已经说得够清楚了。有人能帮忙吗?谢谢!

最佳答案

您不应该在 drawRect: 中创建或更新图层。 layoutSubviews 方法是一个合适的时机。您也可以重复使用面膜。您还有一些保留/释放问题。

- (void)layoutSubviews {
[super layoutSubviews];
[self layoutMask];
}

- (void)layoutMask {
CAShapeLayer *maskLayer = [self subviewMaskLayer];
UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:_subView.bounds
byRoundingCorners:UIRectCornerBottomRight cornerRadii:(CGSize){150.0, 150.0}];
maskLayer.path = path.CGPath;
}

- (CAShapeLayer *)subviewMaskLayer {
CAShapeLayer *mask = (CAShapeLayer *)_subView.layer.mask;
if (mask == nil) {
mask = [CAShapeLayer layer];
_subView.layer.mask = mask;
}
return mask;
}

关于ios - UIView 的自定义图层蒙版,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25852879/

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