如何将边框添加到UIBarButtonItem

Fro*_*art 4 objective-c uibarbuttonitem ios

我希望看到以下内容UIBarButtonItem:

在此输入图像描述

而且我有这样的图像.

(保存它,因为它与StackOverflow背景颜色相同,所以你无法在这里看到它)

如何将第一张图像中的边框添加到UIBarButtonItem?有没有自己画画可能吗?

提前致谢.

Kam*_*pai 8

另一个解决方案是创建UIButton对象并使用它的图层属性进行游戏.

我做了一些基本设置,看起来像蓝色图像,如下所示:

在此输入图像描述

viewDidLoad()方法中添加以下代码,也包括<QuartzCore/QuartzCore.h>框架.

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setFrame:CGRectMake(0, 0, 50, 40)];
[button setImage:[UIImage imageNamed:@"settings.png"] forState:UIControlStateNormal];
button.layer.borderWidth = 1.0f;
button.layer.borderColor = [UIColor lightGrayColor].CGColor;
button.layer.cornerRadius = 5.0f;

button.layer.shadowColor = [UIColor lightGrayColor].CGColor;
button.layer.shadowRadius = 4.0f;
button.layer.shadowOpacity = .9;
button.layer.shadowOffset = CGSizeZero;
button.layer.masksToBounds = NO;


UIBarButtonItem *leftItem = [[UIBarButtonItem alloc] initWithCustomView:button];

self.navigationItem.leftBarButtonItem = leftItem;
Run Code Online (Sandbox Code Playgroud)

添加更多渐变效果

我确实找到了一个git帮助YIInnerShadowView看看,它非常有用.

我使用这些类来使渐变和阴影看起来像蓝色图像.能够与该图像有很多相似之处.您可以对这些类进行更多自定义以获得所需的准确性.

在此输入图像描述

将此库添加到项目,导入#import "YIInnerShadowView.h"和添加代码viewDidLoad()

YIInnerShadowView *innerView = [[YIInnerShadowView alloc] initWithFrame:CGRectMake(0, 0, 50, 40)];
innerView.shadowRadius = 1.5;
innerView.cornerRadius = 5;
innerView.shadowMask = YIInnerShadowMaskAll;

innerView.layer.borderColor = [UIColor colorWithRed:0.3843 green:0.6235 blue:0.8156 alpha:1.0].CGColor;
innerView.layer.borderWidth = 1.0;

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setFrame:CGRectMake(0, 0, 50, 40)];
[button setImage:[UIImage imageNamed:@"settings.png"] forState:UIControlStateNormal];
[innerView addSubview:button];

UIBarButtonItem *leftItem = [[UIBarButtonItem alloc] initWithCustomView:innerView];
self.navigationItem.leftBarButtonItem = leftItem;
Run Code Online (Sandbox Code Playgroud)

YIInnerShadowLayer.m课堂上也做了一点修改:

- (id)init
{
    self = [super init];
    if (self) {

        self.masksToBounds = YES;
        self.needsDisplayOnBoundsChange = YES;
        self.shouldRasterize = YES;

        // Standard shadow stuff
        [self setShadowColor:[[UIColor colorWithWhite:0 alpha:1] CGColor]];
        [self setShadowOffset:CGSizeMake(0.0f, 1.0f)];
        [self setShadowOpacity:1.0f];
        [self setShadowRadius:5];

        // Causes the inner region in this example to NOT be filled.
        [self setFillRule:kCAFillRuleEvenOdd];

        self.shadowMask = YIInnerShadowMaskAll;

    }
    return self;
}
Run Code Online (Sandbox Code Playgroud)

  • 不确定.但是在Nib中查看`UIBarButtonItem`属性,它并没有为我们提供更多的自定义.所以最好以编程方式使用. (2认同)
  • 这是正确的方法.恐怕你不能通过Interface Builder来做到这一点.你只需要在`[super viewDidLoad]之后把它放在你的` - (void)viewDidLoad`中;`你很高兴.只需在您使用此解决方案的文件中添加`#import <QuartzCore/QuartzCore.h>`. (2认同)
  • @FrozenHeart我尽可能地尝试使它与你的相似.检查编辑的答案. (2认同)