将cornerRadius和setbackgroundimage设置为UIButton

时间:2013-07-01 09:20:51

标签: ios uibutton cornerradius setbackground

我正在尝试设置UIButton的cornerRadius,但我不知道该怎么做。

如果我喜欢这样:

button.layer.cornerRadius = 5;

效果很好,如果我喜欢这样:

button.layer.cornerRadius = 5;
[button setBackgroundColor:[UIColor colorWithPatternImage:radialGradient]];

角落没有圆角。

我知道我可以解决这个问题

 [button.layer setMasksToBounds:YES];

但我特意寻找不同的解决方案,因为我在按钮上添加了一些箭头,如果我将蒙版设置为边界,则箭头会被屏蔽。

编辑:

radialGradient是whit func

+ (UIImage *)getRadialGradientImage:(CGSize)size centre:(CGPoint)centre radius:(float)radius startColor:(UIColor *)startColor endColor:(UIColor *)endColor{

// Initialise
UIGraphicsBeginImageContextWithOptions(size, YES, 1);

// Create the gradient's colours
size_t num_locations = 2;
CGFloat locations[2] = { 0.0, 1.0 };

const CGFloat *component_first = CGColorGetComponents([startColor CGColor]);

CGFloat red1 = component_first[0];
CGFloat green1 = component_first[1];
CGFloat blue1 = component_first[2];

const CGFloat *component_second = CGColorGetComponents([endColor CGColor]);
CGFloat red2 = component_second[0];
CGFloat green2 = component_second[1];
CGFloat blue2 = component_second[2];

const CGFloat components[8] = { red1,green1,blue1,1,red2,green2,blue2,1}; // End color

CGColorSpaceRef myColorspace = CGColorSpaceCreateDeviceRGB();
CGGradientRef myGradient = CGGradientCreateWithColorComponents (myColorspace, components, locations, num_locations);

// Normalise the 0-1 ranged inputs to the width of the image
CGPoint myCentrePoint = CGPointMake(centre.x * size.width, centre.y * size.height);
float myRadius = MIN(size.width, size.height) * radius;

// Draw it!
CGContextDrawRadialGradient (UIGraphicsGetCurrentContext(), myGradient, myCentrePoint,
                             0, myCentrePoint, myRadius,
                             kCGGradientDrawsAfterEndLocation);

// Grab it as an autoreleased image
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

// Clean up
CGColorSpaceRelease(myColorspace); // Necessary?
CGGradientRelease(myGradient); // Necessary?
UIGraphicsEndImageContext(); // Clean up
return image;
}

7 个答案:

答案 0 :(得分:44)

以下是我如何通过代码创建按钮并设置其背景颜色。

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

以下是与上述代码相关的按钮图像 enter image description here

您可以随时使用代码并创建背景和边框所需的颜色。希望这会帮助你。

答案 1 :(得分:17)

btn.clipsToBounds = YES; 

我刚添加了这个,它对我有用。我实际上能够将角半径设置为UIButton,并将图像设置为特定的UIButton。

答案 2 :(得分:5)

你也可以:

btn.clipsToBounds = true;

答案 3 :(得分:3)

//像这样创建按钮

     UIButton *cancel=[[UIButton alloc]initWithFrame:CGRectMake(9, 9,35,35)];
    cancel.backgroundColor=[UIColor  colorWithPatternImage:[UIImage imageNamed:@"BackX.png"]];
[cancel setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];

    [cancel.layer setBorderColor: [[UIColor blackColor] CGColor]];
    [cancel.layer setBorderWidth: 1.0];
    cancel.contentMode=UIViewContentModeScaleAspectFill;
    cancel.clipsToBounds=YES;
    cancel.layer.cornerRadius=8.0;
    [cancel addTarget:self action:@selector(cancelbtnclk1:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:cancel];

在此之前添加QuartzCore Framework并在.h文件中导入QuartzCore / CoreAnimation.h。

希望它会帮助你......

答案 4 :(得分:0)

使用UIGraphicsImageRenderer,您可以使用cgContext的{​​{1}}属性访问UIGraphicsImageRendererContext并添加一个四舍五入的路径:

CGContext

已添加为UIGraphicsImageRenderer(size: size).image { context in let rect = CGRect(origin: .zero, size: size) let clipPath = UIBezierPath(roundedRect: rect, cornerRadius: cornerRadius).cgPath context.cgContext.addPath(clipPath) context.cgContext.setFillColor(self.cgColor) context.cgContext.fillPath() } 的扩展名:

UIColor

与使用extension UIColor { public func image(_ size: CGSize = CGSize(width: 10, height: 10), cornerRadius: CGFloat = 4) -> UIImage { return UIGraphicsImageRenderer(size: size).image { context in let rect = CGRect(origin: .zero, size: size) let clipPath = UIBezierPath(roundedRect: rect, cornerRadius: cornerRadius).cgPath context.cgContext.addPath(clipPath) context.cgContext.setFillColor(self.cgColor) context.cgContext.fillPath() } } } 不同,该方法还允许您向按钮添加阴影。

答案 5 :(得分:0)

如果您在按钮背景中使用图片,则需要将Cells(1, 1).Value = Right(Cells(1, 1).Value, Len(Cells(1, 1).Value) - InStr(Cells(1, 1).Value, ".")) 设置为true。

clipsTobounds

答案 6 :(得分:-1)

在Identity Inspector中为Button设置角半径。见图

enter image description here

在按钮的属性检查器中设置背景图像。见图

enter image description here