【问题标题】:How to set rectangle border for custom type UIButton如何为自定义类型 UIButton 设置矩形边框
【发布时间】:2010-10-25 15:42:48
【问题描述】:

我正在尝试将图像设置为自定义 UIButton 的背景。我能够在界面生成器中为“圆角矩形”UIButton 设置背景图像,但现在边框已经消失了。有什么办法可以保留边界吗?另外,我想让边框显示为矩形而不是圆形。

【问题讨论】:

  • 或许还有更多信息?您是否正在实施 -drawRect: ?我们在谈论什么样的自定义按钮?您是否尝试过使用图像设置其背景(大多数人可能会这样做),或者您是否专门寻找矩形绘制方法?
  • 你必须更具体一点。您是否要绘制自定义边框?设置按钮的大小?请告诉我们更多细节。
  • 很好,我正在尝试将图像设置为 UIButton 的背景。我通过在界面生成器中为“圆角矩形”UIButton 设置背景图像来做到这一点。但是边界消失了,有没有办法保留边界?我还需要将边框设为矩形而不是“圆角矩形”。

标签: iphone objective-c cocoa-touch


【解决方案1】:
    #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]];

我知道这是一个老问题,但我仍然想在这里发布我的答案。因为我一直在寻找答案,但我自己以一种简单的方式解决了这个问题。

【讨论】:

  • 如果没有核心动画真的没办法吗?
  • 对于那些没有在下面看到 @TylerJames 添加的人:请注意,您需要导入 QuartzCore 框架才能使其工作。
  • 这就是我想要的。 +1!
【解决方案2】:

查看CALayer 的cornerRadius、borderWidth 和borderColor 属性。这些属性是 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;
}

【讨论】:

  • 在 2.2.1 中,我会采用 Kendall 在下面建议的内容。这是一个新的应用程序吗?如果是这样,我很确定 Apple 从现在开始只会批准与 iPhone OS 3.0 兼容的应用程序。
  • 是的,这是一个新的应用程序。由于 Apple 将仅批准与 OS 3.0 兼容的应用程序,因此新应用程序可能无法与以前的 OS 版本一起使用。尽管 OS 3.0 升级是免费的,但他们中的一些人可能不愿意升级。请分享您的想法。
  • 因为 3.0 是免费的(实际上 iPod Touch 是 10 美元),所以用户升级的财务障碍非常低。随着将要开发的所有新操作系统功能和相关应用程序,我认为大多数用户将很快升级到 3.0。有了这些假设,我宁愿把时间集中在改善我的用户体验和添加新功能上。我想我想将我的支持/维护活动保持在最低限度,只要它不会对我的用户产生太大影响。
  • 谢谢,希望广大用户能升级。
  • 从历史上看,绝大多数用户都升级了……毕竟,您不必担心以 2.1 为目标来捕获尚未从该版本升级的所有 12 个用户。
【解决方案3】:

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

http://i.stack.imgur.com/uBkuB.png

【讨论】:

    【解决方案4】:

    我只想补充 nanshi 和 Jonathan 提供的答案。

    为了访问层的border 和cornerRadius 属性,您首先需要导入 QuartzCore 框架。

    #import &lt;QuartzCore/QuartzCore.h&gt;

    否则您将无法访问这些属性。

    【讨论】:

      【解决方案5】:

      当您在按钮中设置背景图像时,按钮轮廓消失。将它们包含在您的图像中,如果您需要不同的尺寸,请查看 UIImage

      stretchableImageWithLeftCapWidth:topCapHeight:

      方法。

      【讨论】:

        【解决方案6】:

        您可以通过访问按钮的图层属性来设置CALayer上的边框属性。

        首先,添加石英

        #import <QuartzCore/QuartzCore.h>
        

        设置属性:

        [[myButton layer] setBorderWidth:2.0f];
        [[myButton layer] setBorderColor:[UIColor greenColor].CGColor];
        

        【讨论】:

          猜你喜欢
          • 2011-10-07
          • 2016-07-26
          • 2011-02-03
          • 2011-08-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-03
          相关资源
          最近更新 更多