我用渐变创建了这个视图,但是碰巧会出现模糊部分,我完全不知道如何删除它。
这是我的代码:
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];
请帮我解决这个问题。
感谢提前。
答案 0 :(得分:1)
这实际上发生在双方,但由于渐变颜色较浅,因此在左侧更为明显。它发生的原因是因为圆角上的抗锯齿伪像;边框绘制在渐变的顶部,因此当添加部分绘制的边框像素时,错误边上的边框后面会出现渐变类型。
在您的情况下修复它的最简单方法是使渐变层略小于其父级。因此,您可以执行以下操作,而不是匹配边界:
// maskLayer.bounds = viewGradient.bounds;
maskLayer.anchorPoint = CGPointZero;
maskLayer.frame = CGRectInset(viewGradient.bounds, 1, 1);
maskLayer.cornerRadius = 4;
您还需要在设置框架的位置上方移动设置anchorPoint的线,并应用角半径,如上面的代码所示。
这会产生预期的效果:
如果我们使边框部分透明,您可以看到发生了什么:
答案 1 :(得分:0)
也许你在谈论cornerRadius不模糊? 你究竟是什么意思? 你有不透明度0.8它给透明 删除它:
[CATransaction setCompletionBlock:^{
if(some other events happen){
return;
}
}];