我有一个简单的视图(图片的左侧),并且需要为此视图创建某种叠加层(图片的右侧)。此叠加层应具有一定的不透明度,因此在下面的视图中仍部分可见。最重要的是,此覆盖层的中间应有一个圆形孔,这样它就不会覆盖视图的中心(请参见下面的图片)。
我可以轻松地创建一个这样的圆:
int radius = 20; //whatever
CAShapeLayer *circle = [CAShapeLayer layer];
circle.path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0,radius,radius) cornerRadius:radius].CGPath;
circle.position = CGPointMake(CGRectGetMidX(view.frame)-radius,
CGRectGetMidY(view.frame)-radius);
circle.fillColor = [UIColor clearColor].CGColor;
还有一个“完整”的矩形叠加层,如下所示:
CAShapeLayer *shadow = [CAShapeLayer layer];
shadow.path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, view.bounds.size.width, view.bounds.size.height) cornerRadius:0].CGPath;
shadow.position = CGPointMake(0, 0);
shadow.fillColor = [UIColor grayColor].CGColor;
shadow.lineWidth = 0;
shadow.opacity = 0.5;
[view.layer addSublayer:shadow];
但是我不知道如何将这两层结合起来,以便它们产生我想要的效果。任何人?我真的已经尝试了一切...非常感谢您的帮助!
您能否创建一个包含rect和圆的贝塞尔曲线,然后在绘制过程中使用的绕线规则将创建一个孔(我没有尝试过)。
—
北斗星
我不知道该怎么做:)
—
animal_chin
使用rect创建,然后使用
—
北斗星
moveToPoint
,然后添加四舍五入的rect。检查文档中提供的方法UIBezierPath
。
看看这个类似的问题和答案的帮助:在UIView的切割透明窟窿] [1] [1]:stackoverflow.com/questions/9711248/...
—
迪辰
在这里查看我的解决方案:stackoverflow.com/questions/14141081/… 希望这
—
会对