I want to make the glow effect spread outside of thisView.
我使用此代码制作Half-Rounded rect cornered UIVew
。
这是我的代码。
+ (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来屏蔽半连续的矩形后,发光效果会被边界遮挡。
答案 0 :(得分:2)
您所看到的正是面具应该如何工作。您正在将蒙版应用于superview的图层。让我们调用该视图superview
(就像在您的代码中一样)。好的,那会怎样呢?它将掩盖superview
及其所有子图层。 包括其子视图。其子视图实际上是其子图层。
因此,由于按钮是superview
的子视图,因此它们会像superview
中的其他内容一样被屏蔽。
如果您不希望这种情况发生,请不要创建superview
的按钮子视图。例如,它们可以位于superview
之上而不是其子视图。