Iphone 如何为自定义类型UIButton设置矩形边框

Iphone 如何为自定义类型UIButton设置矩形边框,iphone,objective-c,cocoa-touch,Iphone,Objective C,Cocoa Touch,我正在尝试将图像设置为自定义UIButton的背景。我可以在interface builder中为“rounded rect”UIButton设置背景图像,但现在边框消失了。有没有办法保留边界?此外,我希望使边框显示为矩形而不是圆形。查看CALayer的角半径、边框宽度和边框颜色属性。从iPhone OS 3.0开始,这些属性都是新的 您可能希望子类化UIButton,然后在构造函数中设置这些属性。您的按钮有一个图层特性,您可以访问该特性来设置这些边框特性 下面是一个例子: - (id)init

我正在尝试将图像设置为自定义UIButton的背景。我可以在interface builder中为“rounded rect”UIButton设置背景图像,但现在边框消失了。有没有办法保留边界?此外,我希望使边框显示为矩形而不是圆形。

查看
CALayer
角半径
边框宽度
边框颜色
属性。从iPhone OS 3.0开始,这些属性都是新的

您可能希望子类化
UIButton
,然后在构造函数中设置这些属性。您的按钮有一个图层特性,您可以访问该特性来设置这些边框特性

下面是一个例子:

- (id)initWithFrame:(CGRect)frame {
if(self = [super initWithFrame:frame]) {

    [self.layer setBorderWidth:1.0];
    [self.layer setCornerRadius:5.0];
    [self.layer setBorderColor:[[UIColor colorWithWhite:0.3 alpha:0.7] CGColor]];
}

return self;
}

在按钮中设置背景图像时,按钮轮廓将消失。如果需要不同尺寸的图片,请将其包含在图片中

LeftCapWidth:topCapHeight:StretcheableImagewithLeftCapWidth:

方法。

#导入//别忘了将其添加到文件中
    #import <QuartzCore/QuartzCore.h> // don't forget to add this in your file
    CALayer * layer = [yourUIButton layer];
    [layer setMasksToBounds:YES];
    [layer setCornerRadius:0.0]; //when radius is 0, the border is a rectangle
    [layer setBorderWidth:1.0];
    [layer setBorderColor:[[UIColor grayColor] CGColor]];
CALayer*层=[yourUIButton层]; [图层设置maskstobounds:是]; [层半径:0.0]//半径为0时,边框为矩形 [层宽:1.0]; [图层颜色:[[UIColor grayColor]CGColor]];
我知道这是一个老问题,但我还是想把我的答案贴在这里。因为我一直在寻找答案,但我自己很容易就解决了这个问题。

您也可以在IB中“用户定义的运行时属性”来设置圆角,如下图所示


我想补充一下南希和乔纳森提供的答案

要访问图层的
边框
拐角半径
属性,首先需要导入QuartzCore框架

#导入


否则,您将无法访问属性

通过访问按钮的图层属性,可以在CALayer上设置边框属性

首先,加入石英

#import <QuartzCore/QuartzCore.h>

也许再多了解一点?你是在实现-drawRect:吗?我们谈论的是哪种自定义按钮?您是否尝试过使用图像设置其背景(这可能是大多数人都会做的),或者您是否专门寻找矩形绘制方法?您必须更具体一点。您正在尝试绘制自定义边框吗?设置按钮的大小?请给我们更多的细节。好的,我正在尝试设置一个图像作为UIButton的背景。为此,我在interface builder中为“rounded rect”UIButton设置了背景图像。但是边界消失了,有没有办法保留边界?此外,我还需要将边框设置为rect,而不是“圆角rect”。在2.2.1中,我将按照Kendall下面的建议进行操作。这是新申请吗?如果是这样的话,我敢肯定,从现在起,苹果将只批准与iPhone OS 3.0兼容的应用程序。是的,这是一个新的应用程序。由于苹果将只批准与OS 3.0兼容的应用程序,新的应用程序可能无法与以前的OS版本兼容。尽管OS3.0升级是免费的,但他们中的一些人可能不愿意升级。请分享你的想法。因为3.0是免费的(iPodtouch实际上是10美元),用户升级的经济障碍非常低。随着所有新的操作系统功能和相关应用的开发,我认为大多数用户将相当快地升级到3.0。有了这些假设,我宁愿把时间集中在改善用户体验和添加新功能上。我想我希望将我的支持/维护活动保持在最低限度,只要它不会对我的用户产生太大的影响。谢谢,让我们希望大多数用户都会进行升级。从历史上看,绝大多数用户都升级了。。。毕竟,你不必担心瞄准2.1来捕获所有12个没有从该版本升级的用户。如果没有核心动画,真的没有办法做到这一点吗?对于那些没有看到下面添加@TylerJames的人:请注意,你需要导入QuartzCore框架才能工作。这就是我一直在寻找的+1.
[[myButton layer] setBorderWidth:2.0f];
[[myButton layer] setBorderColor:[UIColor greenColor].CGColor];