我用渐变创建了这个 View ,但碰巧出现了模糊部分,我完全不知道如何删除它。
这是我的代码:
NSArray *grandientColor = [NSArray arrayWithObjects:
(id) [[UIColor colorWithRed:1 green:1 blue:0.79 alpha:1] CGColor],
(id) [[UIColor colorWithRed:1 green:0.93 blue:0.61 alpha:1] CGColor],
(id) [[UIColor colorWithRed:1 green:0.85 blue:0.43 alpha:1] CGColor],
(id) [[UIColor colorWithRed:1 green:0.7 blue:0.25 alpha:1] CGColor],
(id) [[UIColor colorWithRed:1 green:0.55 blue:0.18 alpha:1] CGColor],
(id) [[UIColor colorWithRed:1 green:0.3 blue:0.1 alpha:1] CGColor],
(id) [[UIColor colorWithRed:0.9 green:0.08 blue:0.04 alpha:1] CGColor],
(id) [[UIColor colorWithRed:0.75 green:0 blue:0.13 alpha:1] CGColor],
(id) [[UIColor colorWithRed:0.51 green:0 blue:0.14 alpha:1] CGColor],
(id) [[UIColor colorWithRed:0.29 green:0 blue:0.08 alpha:1] CGColor],nil
];
UIView *viewGradient = [[UIView alloc] initWithFrame:CGRectMake(15.0f, 50.0f, 126.0f, 25.0f)];
viewGradient.layer.cornerRadius = 5;
viewGradient.layer.masksToBounds = YES;
viewGradient.layer.borderColor = [UIColor blackColor].CGColor;
viewGradient.layer.borderWidth = 2.0f;
CAGradientLayer *maskLayer = [CAGradientLayer layer];
maskLayer.opacity = 0.8;
maskLayer.colors = grandientColor;
// Hoizontal - commenting these two lines will make the gradient veritcal
maskLayer.startPoint = CGPointMake(0.0, 0.5);
maskLayer.endPoint = CGPointMake(1.0, 0.5);
maskLayer.bounds = viewGradient.bounds;
maskLayer.anchorPoint = CGPointZero;
[viewGradient.layer addSublayer:maskLayer];
[legendView addSubview:viewGradient];
请帮我解决这个问题。
提前致谢
最佳答案
这实际上发生在两侧,但由于渐变的颜色较浅,因此在左侧更为明显。发生这种情况的原因是圆角上的抗锯齿伪像;边框绘制在渐变之上,因此当添加部分绘制的边框像素时,渐变会在错误的一侧泄漏到边框后面。
在您的情况下修复它的最简单方法是使渐变层略小于其父层。因此,您可以执行以下操作,而不是匹配边界:
// maskLayer.bounds = viewGradient.bounds;
maskLayer.anchorPoint = CGPointZero;
maskLayer.frame = CGRectInset(viewGradient.bounds, 1, 1);
maskLayer.cornerRadius = 4;
您还需要将设置 anchor 的线移动到您设置框架的位置上方,并应用圆角半径,如上面的代码所示。
这会产生预期的效果:
如果我们使边框部分透明,您可以看到发生了什么:
关于ios - 从 View 中移除模糊部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33168158/