0

I want to make the glow effect spread outside of thisView.

我用这段代码来制作Half-Rounded rect cornered UIVew.

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

并且two image buttons在这种观点中存在封闭的边界。如果按钮上发生触摸事件,发光效果显示(showsTouchWhenHighlighted

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

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

并且发光效果散布在“thisView”之外。

但是在“thisView”中使用 CAShapeLayer 来掩盖半被唤醒的矩形后,发光效果被边界掩盖了。

4

1 回答 1

2

你所看到的正是面具应该如何工作。您正在将蒙版应用于超级视图的图层。让我们调用该视图superview(就像在您的代码中一样)。好的,那会做什么呢?它将遮罩superview及其所有子层。这包括它的子视图。它的子视图实际上是它的子层。

因此,由于按钮是 的子视图superview,因此它们像内部的其他所有内容一样被屏蔽superview

如果您不希望这种情况发生,请不要将按钮子视图设为superview. 例如,它们可以坐在上面superview而不是它的子视图。

于 2013-04-18T03:24:54.843 回答