ios - 目标c:用另一层遮罩层并改变框架时的奇怪行为
问题描述
UIBezierPath * path = [UIBezierPath bezierPathWithArcCenter:CGPointZero radius:80 startAngle:0 endAngle:(2 * M_PI) clockwise:YES];
CAShapeLayer * layer = [CAShapeLayer new];
layer.strokeColor = [UIColor redColor].CGColor;
layer.fillColor = [UIColor clearColor].CGColor;
layer.lineWidth = 10;
layer.strokeEnd = 1;
layer.position = self.view.center;
layer.lineCap = kCALineCapRound;
[layer setPath : path.CGPath];
[self.view.layer addSublayer : layer];
CAGradientLayer * gradientLayer = [CAGradientLayer layer];
gradientLayer.startPoint = CGPointMake(0.0,0.5);
gradientLayer.endPoint = CGPointMake(1.0,0.5);
gradientLayer.frame = self.view.frame;
NSArray *colors = @[(id)[UIColor greenColor].CGColor,(id)[UIColor blueColor].CGColor,(id)[UIColor yellowColor].CGColor];
gradientLayer.colors = colors;
[gradientLayer setMask : layer];
[self.view.layer addSublayer : gradientLayer];
我在做什么:
将 CAShapeLayer 添加到 view.layer 并带有绘制圆的路径。
将 CAGradientLayer(3 种颜色)添加到 view.layer 并将 setingMask 添加到 CAShapeLayer。
结果:有和没有面具
问题 :
如果我将渐变的框架更改为在圆的顶部(因为我想查看圆上的所有颜色),它也会移动圆。特别是梯度的 x 和 y 的变化
所以而不是
gradientLayer.frame = self.view.frame;
我只更改 x 和 y (据我检查,宽度和高度不会导致此问题)
gradientLayer.frame = CGRectMake(100,100, self.view.frame.size.width, self.view.frame.size.height);
这就是结果
谁能解释为什么会发生这种情况以及可能的解决方案是什么?
我想要实现的是这个
然后用 CAShapeLayer 掩盖它,但随后发生了这个问题
提前致谢
解决方案
改变 shapelayer 的位置,因为渐变层是全屏的,并且 shapelayer 设置了中心位置,并且在你改变渐变层的框架之后 shapelayer 也会随着相同的位置发生变化。
layer.position = CGPointMake(30, 250);
推荐阅读
- javascript - 从数组的字典 JS 中获取数据的问题
- css - 你可以用点击功能改变css吗?
- export - 验证 Odoo 13 中 one2many 字段列的导出数据
- php - 在语言文件中使用 codeIgniter 常量变量
- angular - HTTP 请求标头不包含 Angular 中的自定义标头
- puppeteer - Puppeteer - 在截屏之前等待生成的页面完全加载
- javascript - 是否可以在反应路由器中创建不是父级子路由的嵌套路由?
- java - JDK 8 在 KeyStore.load 中使用 SHA 哈希算法是否安全?
- sql-server - 生成每个月的股票头寸报告,并在特定月份设置日期变量
- typescript - TypeScript:DefinitelyTyped 中的子函数