如何从UIButton控件中去除锐利的矩形边缘?

8

请看下面的图片:

enter image description here

你可以看到边缘是锐利的矩形,它们从圆角按钮中出现。如何不显示边缘而仅显示圆形按钮?

更新(解决方法):

我使用以下代码来实现圆角:

UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:self.stopButton.bounds 
                                       byRoundingCorners:UIRectCornerAllCorners  
                                       cornerRadii:CGSizeMake(12.0, 12.0)];

// Create the shape layer and set its path
CAShapeLayer *maskLayer = [CAShapeLayer layer];
maskLayer.frame = self.stopButton.bounds;
maskLayer.path = maskPath.CGPath;
// Set the newly created shape layer as the mask for the image view's layer
self.stopButton.layer.mask = maskLayer;

新问题:

这段代码在 startButtonRound.layer.cornerRadius 行上给我报错。

  UIButton *roundStartButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
        roundStartButton.frame = CGRectMake(10, 10, 100, 20); 
        [roundStartButton setBackgroundImage:[UIImage imageNamed:@"green_gradient.jpg"] forState:UIControlStateNormal]; 

        roundStartButton.layer.cornerRadius = 12.0; 
 UIBarButtonItem *startButton = [[UIBarButtonItem alloc] initWithCustomView:roundStartButton];
3个回答

17

你可以仅使用CALayer来完成这个操作:

CALayer *myLayer = [CALayer layer];
[myLayer setMasksToBounds:YES];
[myLayer setCornerRadius:5.0f];
[myLayer setBorderWidth:1.0f];
[myLayer setBorderColor: [[UIColor blackColor] CGColor]];
[myLayer setBackgroundColor: [[UIColor whiteColor] CGColor]];

您还需要包含QuartzCore框架,并将该框架的头文件包含在自己的代码中。

#include <QuartzCore/QuartzCore.h>

希望这可以帮到你

Tim


我尝试过 [button layer] setCornerRadius:5.0f]; 但它对按钮没有任何影响。 - azamsharp
不应该有问题,因为UIKit中所有派生自UIView的控件都是基于图层(CALayer)的。您能提供错误本身吗? - Tim Davies
2
这是错误信息:在前向类对象 'CALayer *' 中找不到属性 'cornerRadius'。 - azamsharp
2
你是否已经将QuartzCore框架添加到你的项目中了?如果没有,你需要这样做,然后在你的头文件中包含<QuartzCore/QuartzCore.h>。 - Tim Davies
你可能想将这个设置为答案,以便其他人可以看到关于QuartzCore的注释。 - Tim Davies
显示剩余2条评论

5
我认为所有这些都可以通过以下方式实现:
self.stopButton.layer.cornerRadius = 12.0;

但是你尝试过吗?
self.stopButton.opaque = NO;
self.stopButton.backgroundColor = [UIColor clearColor];

?


谢谢Bill!那个很好用!我不确定我做了什么,但现在即使没有cornerRadius也不会显示边缘。但是你的代码删除了我的5-6行代码,所以谢谢! - azamsharp
UIButton.layer.cornerRadius对我不起作用。它会返回一个错误,但将backgroundColor设置为clear并将opaque设置为NO就可以了。 - oky_sabeni
@Yko,你真的在使用UIButton.layer.cornerRadius吗?那是(试图)访问类,而不是类的实例。 - bshirley
@bshirley。不是的。我有一个UIButton *btn = alloc...然后我输入btn.layer.cornerRadius。 - oky_sabeni
1
@Yko,你可能遇到的错误是因为需要 #import <QuartzCore/QuartzCore.h> - bshirley
@bshirley。哈哈哈。哇!好主意。我还没有尝试过,但我相信你是对的。完全忘记了这点...谢谢! - oky_sabeni

0

从图像的外观来看,您已将UIButton的背景颜色设置为“白色”。请将其更改为“透明颜色”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接