2015-05-31 2 views
0

мне нужно установить скругленный прямоугольник в качестве фона для UIButton, и мне нужно, чтобы создать его программно, связанным с цветомПомутнения округлого прямоугольника UIBezierPath, 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://stackoverflow.com/a/19142851/1090590

но моя кнопка фон «размытый»

Что я делаю неправильно? Как я могу сделать это разборчивым?

enter image description here

+0

использование button.border и button.layer.cornerRadius = 5; – Omarj

+0

Я знаю об этом решении, но это будет не очень хорошо для API-интерфейса моего пользовательского интерфейса. – BergP

+0

Я подозреваю, что проблема заключается в параметре 'scale'' UIGraphicsBeginImageContextWithOptions'. Установите его на «0.0», чтобы использовать масштабный коэффициент экрана устройства. – bobnoble

ответ

0

Вы можете использовать слой, чтобы установить радиус угла

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]; 
+0

Я знаю об этом решении, но это было бы не очень хорошо для API моего пользовательского интерфейса. Было бы лучше сделать это с фоновым изображением. – BergP

+0

@BergP проверьте это и дайте мне знать, если это полезно или нет. Http://orangejuiceliberationfront.com/are-your-rectangles-blurry-pale-and-have-rounded-corners/ – Omarj

0

Попробуйте это изменение

-(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 кнопки ,

Result

изменение цвета в зависимости от вашего выбора

Смежные вопросы