我想让
UIBarButtonItem
的外观如下图所示:
我有这张图片。(请保存它,因为它与 StackOverflow 背景颜色相同,所以您无法在此处看到它)
如何将第一张图片中的边框添加到 UIBarButtonItem
中?没有自己绘制的话,是否可能实现?
提前感谢。
UIBarButtonItem
的外观如下图所示:
我有这张图片。(请保存它,因为它与 StackOverflow 背景颜色相同,所以您无法在此处看到它)
如何将第一张图片中的边框添加到 UIBarButtonItem
中?没有自己绘制的话,是否可能实现?
提前感谢。
另一种解决方法是创建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;
我找到了一个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;
我还对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;
}
UIBarButtonItem
属性,它并没有为我们提供更多的自定义选项。因此最好通过编程来实现。 - Kampai-(void)viewDidLoad
中,紧接着[super viewDidLoad];
即可。只需在使用此解决方案的文件中添加#import <QuartzCore/QuartzCore.h>
即可。 - Anon#import <QuartzCore/QuartzCore.h>
是一个值得注意的点。谢谢。 - Kampai