【发布时间】:2014-02-09 13:03:04
【问题描述】:
我创建了一个带有半透明黑色背景的 UIView 来放置在我的主应用程序视图中。我在这里的目标是在UIView 的某处创建一个剪掉的圆形形状,其中看不到半透明的黑色背景,在整个图像上产生黑色蒙版的效果,除了圆形区域(这个是突出显示该区域中的按钮)。
我已经设法使用CAShapeLayer 创建了一个圆形蒙版,但这产生了相反的效果(即视图的其余部分是清晰的,而圆圈内是半透明的黑色。我想要什么就像圆圈外的所有东西都保持半透明黑色,那么里面有什么要清楚。这是我使用的代码,我该如何让它以相反的方式工作?我的blackMask是半透明的黑色视图,我的buttonCircle 是我想要保持清晰的圈子。
也许我需要以某种方式反转路径?
CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
CGRect maskRect = buttonCircle.frame;
CGPathRef path = CGPathCreateWithEllipseInRect(maskRect, NULL);
maskLayer.path = path;
CGPathRelease(path);
blackMask.layer.mask = maskLayer;
编辑:现在试试这个,这个面具根本看不到任何面具:
UIView *circularMaskView = [[UIView alloc] initWithFrame:buttonCircle.frame];
circularMaskView.backgroundColor = [UIColor greenColor];
CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
CGPathRef path = CGPathCreateWithEllipseInRect(buttonCircle.frame, NULL);
maskLayer.path = path;
CGPathRelease(path);
circularMaskView.layer.mask = maskLayer;
[blackMask addSubview:circularMaskView];
【问题讨论】:
-
尝试在按钮后面添加一个额外的视图(同一框架)并将其作为子视图添加到 blackMask
-
这不行,按钮本身不是一个圆圈。我只想在它周围画一个圆圈。
-
我的意思是创建一个新视图,将它的背景颜色设置为某个值(非透明)。设置这个新视图的框架与 buttonCircle.frame 相同。将遮罩应用到这个新视图(路径 =buttonCircle.bounds)并将其作为子视图添加到 blackMask。
-
创建一个反向路径,如this?
-
这似乎不适用于
[UIColor clearColor]。我可以制作一个绿色蒙版或其他颜色、位置等正确的东西,但如果我将颜色设置为清除,它就不起作用了。我在新视图上检查了opaque。
标签: ios objective-c uiview core-animation cashapelayer