gpt4 book ai didi

ios - 将 CAShapeLayer 应用于除 UIButton 之外的主 UIView

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:33:39 25 4
gpt4 key购买 nike

这是对整个 UIView 应用掩码的代码:

UIBezierPath *maskPath = [UIBezierPath bezierPathWithRect:self.view.bounds];
[maskPath appendPath:[UIBezierPath bezierPathWithArcCenter:self.mapCardsButton.center
radius:self.mapCardsButton.frame.size.height/2.0f
startAngle:0.0f
endAngle:2.0f*M_PI
clockwise:NO]];
CAShapeLayer *maskLayer = [CAShapeLayer layer];
maskLayer.fillRule = kCAFillRuleEvenOdd;
maskLayer.fillColor = [UIColor blackColor].CGColor;
maskLayer.path = maskPath.CGPath;
self.view.layer.mask = maskLayer;

问题是我想将上面的掩码应用到整个 UIView,除了一个特定的 UIButton(mapCardsButton),它也在同一个 UIView 上。可以吗?

UPD:我试过了

[self.view.layer insertSublayer:maskLayer atIndex:0];

代替

self.view.layer.mask = maskLayer;

但是我的 self.view 丢失了 alpha channel 并且 maskLayer 的动画不再工作了

这是一个项目代码:https://www.dropbox.com/s/b94qcwxzoi23kwk/test_04092016.zip?dl=0

最佳答案

你为什么不试试下面的方法呢?而不是以下堆栈:

• 蒙版( View )-> 按钮

使 View 背景颜色清晰,在一个额外的 subview 中并执行以下操作:

• View -> 掩码( subview )、按钮

这样你会有同样的视觉效果,但是使用底部 View 作为容器。在代码中:

UIBezierPath *maskPath = [UIBezierPath bezierPathWithRect:self.view.bounds];
[maskPath appendPath:[UIBezierPath bezierPathWithArcCenter:self.mapCardsButton.center
radius:self.mapCardsButton.frame.size.height/2.0f
startAngle:0.0f
endAngle:2.0f*M_PI
clockwise:NO]];
CAShapeLayer *maskLayer = [CAShapeLayer layer];
maskLayer.fillRule = kCAFillRuleEvenOdd;
maskLayer.fillColor = [UIColor blackColor].CGColor;
maskLayer.path = maskPath.CGPath;

UIView *maskedView = [[UIView alloc] initWithFrame:self.view.bounds];
maskedView.mask = maskLayer;

self.view.backgroundColor = [UIColor clearColor];
[self.view addSubView:maskedView];
[self.view addSubView:self.mapCardsButton];

关于ios - 将 CAShapeLayer 应用于除 UIButton 之外的主 UIView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36404126/

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