模糊的圆角矩形 UIBezierPath,UIButton 背景

Posted

技术标签:

【中文标题】模糊的圆角矩形 UIBezierPath,UIButton 背景【英文标题】:Blurred rounded rect UIBezierPath, UIButton background 【发布时间】:2015-05-31 09:59:02 【问题描述】:

我需要设置一个圆角矩形作为 UIButton 的背景,我需要以编程方式生成它,与颜色相关

+ (UIImage *)buttonBackgroundWithColor:(UIColor *)color 
    UIGraphicsBeginImageContextWithOptions(CGSizeMake(30.f, 30.f), NO, 1.0f);

    CGContextRef context = UIGraphicsGetCurrentContext();
    [color setStroke];

    UIBezierPath *bezierPath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(2.f, 2.f, 26.f, 26.f)
                                                          cornerRadius:7.f];
    CGContextSetStrokeColorWithColor(context, color.CGColor);
    bezierPath.lineWidth = 1.f;
    [bezierPath stroke];

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();
    return [[image copy] resizableImageWithCapInsets:UIEdgeInsetsMake(10.f, 10.f, 10.f, 10.f)];

我已经尝试过这里描述的 https://***.com/a/19142851/1090590

但是,我的按钮背景是“模糊的”

我做错了什么?我怎样才能使它清晰易读?

【问题讨论】:

使用 button.border 和 button.layer.cornerRadius = 5; 我知道那个解决方案,但它对我的 UI 组件的 API 来说不是很好。 我怀疑问题出在UIGraphicsBeginImageContextWithOptionsscale 参数上。将其设置为 0.0 以使其使用设备屏幕的比例因子。 @bobnoble 你是对的,谢谢。如果您将其移到答案部分,我会接受您的答案。 【参考方案1】:

您可以使用图层设置圆角半径

UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.frame = CGRectMake(100, 100, 100,50);
[btn setTitle:@"Hello" forState:UIControlStateNormal];
[btn setBackgroundColor:[UIColor colorWithRed:128.0/255.0f green:0.0/255.0f  blue:0.0/255.0f alpha:0.7]];
btn.frame = CGRectMake(100.0, 100.0, 120.0, 50.0);//width and height should be same  value
btn.clipsToBounds = YES;

btn.layer.cornerRadius = 20;//half of the width
btn.layer.borderColor=[UIColor redColor].CGColor;
btn.layer.borderWidth=2.0f;

[self.view addSubview:btn];

【讨论】:

我知道那个解决方案,但它对我的 UI 组件的 API 来说不是很好。最好用背景图片来做。 @BergP 检查这个并让我知道它是否有帮助orangejuiceliberationfront.com/…【参考方案2】:

试试这个

-(void)getButtonScreenShot:(UIButton *)button
button.layer.cornerRadius = 5.0;
button.layer.borderWidth = 2.0;
button.layer.borderColor = [UIColor blueColor].CGColor;

UIGraphicsBeginImageContext(button.frame.size);

CGContextRef  context = UIGraphicsGetCurrentContext();

[self.mybutton.layer renderInContext:context];


UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();


button.layer.cornerRadius = 0;
button.layer.borderWidth = 0;
button.layer.borderColor = nil;

cornerRadius、borderWidth 和borderColor 的变化不会反映在按钮的实际UI 中。

根据你的选择改变颜色

【讨论】:

以上是关于模糊的圆角矩形 UIBezierPath,UIButton 背景的主要内容,如果未能解决你的问题,请参考以下文章

iOS:贝塞尔曲线(UIBezierPath)-----Swift

UIBezierPath

如何快速绘制简单的圆角矩形(圆角)

绘制没有底部边框的圆角矩形边框

如何在 Xamarin.iOS 中绘制圆角矩形?

如何为 UIBezierPath 提供cornerRadius