gpt4 book ai didi

iphone - 如何在 CAShapeLayer(Rounded-Recr cornered UIView) 上设置 maskToBounds 效果?

转载 作者:行者123 更新时间:2023-11-28 22:35:51 25 4
gpt4 key购买 nike

我想让发光效果散布到 thisView 之外。

我使用这段代码制作了Half-Rounded rect cornered UIVew

Round two corners in UIView

这是我的代码。

+ (UIView *)makeUpperHalfRoundedView:(UIView *)view {
CAShapeLayer *maskLayer = [CAShapeLayer layer];
maskLayer.frame = view.bounds;
UIBezierPath *roundedPath =
[UIBezierPath bezierPathWithRoundedRect:maskLayer.bounds
byRoundingCorners:UIRectCornerTopLeft | UIRectCornerTopRight
cornerRadii:CGSizeMake(8.f, 8.f)];
maskLayer.fillColor = [[UIColor blackColor] CGColor];
maskLayer.backgroundColor = [[UIColor clearColor] CGColor];
maskLayer.path = [roundedPath CGPath];
// maskLayer.masksToBounds = NO;

//Don't add masks to layers already in the hierarchy!
UIView *superview = [view superview];
[view removeFromSuperview];
view.layer.mask = maskLayer;
[superview addSubview:view];

return view;
}

并且在靠近边界的 View 中有两个图像按钮。如果按钮发生触摸事件,发光效果显示(showsTouchWhenHighlighted)

在使用这段代码之前,我只是用

thisView.layer.cornerRadius = 8;
thisVIew.layer.masksToBounds = NO;

发光效果在“thisView”之外传播。

但是在 'thisView' 中使用 CAShapeLayer 来屏蔽半唤醒的矩形后,发光效果被边界屏蔽了。

最佳答案

您所看到的正是面具的工作原理。您正在将蒙版应用于父 View 的图层。我们将该 View 称为 superview(就像在您的代码中一样)。好的,那会做什么?它将屏蔽 superview 及其所有子层。 包括它的 subview 。它的 subview 实际上是它的子层。

因此,由于按钮是 superview 的 subview ,因此它们像 superview 中的其他所有内容一样被屏蔽。

如果您不希望这种情况发生,请不要将按钮设为 superview 的 subview 。例如,它们可以位于 superview 之上而不是它的 subview 。

关于iphone - 如何在 CAShapeLayer(Rounded-Recr cornered UIView) 上设置 maskToBounds 效果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16073879/

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