gpt4 book ai didi

ios - 带有切出段和阴影的 UIView

转载 作者:行者123 更新时间:2023-11-29 00:07:54 25 4
gpt4 key购买 nike

我的问题如下:我正在尝试从自定义 UIView 中切出一段,并向该 View 应用阴影效果。

在自定义 UIView 类中,我这样做了:

创建了两个图层 - 阴影和蒙版。添加阴影层作为此自定义 View 的子层。然后我创建了一个新 View ,将其 mask 设置为 mask 层并将其作为 subview 添加到自定义 View 。

self.backgroundColor = [UIColor clearColor];
CGFloat radius = 40;
float startAngle = -M_PI;
float endAngle = 0;

UIBezierPath *path = [UIBezierPath bezierPathWithRect:self.bounds];

[path moveToPoint:CGPointMake(CGRectGetMidX(self.bounds), CGRectGetMaxY(self.bounds)+radius/1.8)];
[path addArcWithCenter:CGPointMake(CGRectGetMidX(self.bounds), CGRectGetMaxY(self.bounds)+radius/1.8) radius:radius startAngle:startAngle endAngle:endAngle clockwise:YES];

CAShapeLayer *shadowLayer = [[CAShapeLayer alloc] init];
shadowLayer.frame = self.bounds;
shadowLayer.path = path.CGPath;
shadowLayer.shadowColor = [UIColor grayColor].CGColor;
shadowLayer.shadowOpacity = 0.5;
shadowLayer.shadowRadius = 2;
shadowLayer.masksToBounds = NO;
shadowLayer.shadowOffset = CGSizeMake(2.0, 2.0);
shadowLayer.fillRule = kCAFillRuleEvenOdd;


CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
maskLayer.frame = self.bounds;
maskLayer.masksToBounds = NO;
maskLayer.path = path.CGPath;
maskLayer.fillRule = kCAFillRuleEvenOdd;
maskLayer.fillColor = [UIColor whiteColor].CGColor;

[self.layer addSublayer:shadowLayer];

UIView *view = [[UIView alloc] initWithFrame:self.bounds];
view.backgroundColor = [UIColor whiteColor];
view.layer.mask = maskLayer;
[self addSubview:view];

这就是我想要实现的目标 -

enter image description here

这就是我实际得到的

enter image description here

如果我设置 clipToBounds = YES,它会切断所需的阴影效果。

如果我想切割一个半圆,那绝对没有问题。因为在这种情况下,半圆路径完全位于 View 边界内。

enter image description here

但我确实需要实现第一张图片中显示的结果。本来想着逐行建路径,结果到这个圆弧的时候就出问题了,结果估计不会那么准确。

有人知道如何做到这一点吗?谢谢!

最佳答案

编辑:如果问题是路径错误,请不要使用圆圈和猜测坐标在代码中合成路径。相反,您应该导出坐标实际图稿并将图稿坐标用于曲线。看起来你有一个草图文件,所以最简单的方法是复制并粘贴到 paint code 中,这将为你提供曲线代码,但如果你没有绘画代码(你应该,这太棒了这种东西)你可以从草图中将曲线导出为 SVG。如果您在文本编辑器中打开生成的 SVG,您将看到它以人类可读的 XML 格式显示,您可以从那里从贝塞尔曲线中提取控制点。

关于ios - 带有切出段和阴影的 UIView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47490658/

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