UIBarButton与CustomView和边界(UIBarButton with CustomV

2019-09-16 08:42发布

我的UIBarButtonItem子类和我试图让一个按钮,通常dispays刷新图像,但加载时的活动微调。 我的问题是我不能让被包围的样式里面显示自定义视图。 它只是不会出现。

这是我的代码(从我的UIBarButtonItem子类的构造函数):

self = [super initWithTitle:@"" style:UIBarButtonItemStyleBordered target:self action:nil];
UIView *viwInner = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 24,24)];
[self.customView addSubview:viwInner];

self.btnStandard = [UIButton buttonWithType:UIButtonTypeCustom];
[self.btnStandard setFrame:CGRectMake(0, 0, 24,24)];
UIImage *initialImage = [[UIImage imageNamed:@"refresh_24.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
[self.btnStandard setBackgroundImage:initialImage forState:UIControlStateNormal];
[self.btnStandard setBackgroundImage:initialImage forState:UIControlStateHighlighted];
[self.btnStandard setBackgroundImage:initialImage forState:UIControlStateSelected];
[self.btnStandard addTarget:self action:@selector(didTapInitialButton:) forControlEvents:UIControlEventTouchUpInside];
[viwInner addSubview:self.btnStandard];

self.btnLoading = [UIButton buttonWithType:UIButtonTypeCustom];
[self.btnLoading setFrame:CGRectMake(0, 0, 24,24)];
self.loadingView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActionSheetStyleBlackOpaque];
[self.loadingView setHidesWhenStopped:true];
[self.loadingView stopAnimating];
[self.btnLoading addSubview:self.loadingView];
[self.btnLoading addTarget:self action:@selector(didTapAbortButton:) forControlEvents:UIControlEventTouchUpInside];
[viwInner addSubview:self.btnLoading];

return self;

有没有这是不工作的理由?

Answer 1:

在iOS5中,还有一招让动画图像成UIBarButtonItem和维护UIBarButtonItemStyleBordered

UIImage *image = [UIImage animatedImageNamed:@"refresh-" duration:1.f];
self.button = [[UIBarButtonItem alloc] initWithImage:image
                                               style:UIBarButtonItemStyleBordered 
                                              target:self
                                              action:@selector(doSomething:)];

然后,创建一组图像,对于动画的每一帧中的一个图像,并将其命名然后“刷新-0.png”,“刷新1.png”等字样:

当你想停止动画,请更换一个静态版本的按钮的图像:

self.button.image = [UIImage imageNamed:@"refresh-0.png"];

它仍然有自己创建这些图像的显著麻烦,但它可能比创建自己的按钮,边框背景更加一致。



Answer 2:

要做到这一点使用UIActivityIndi​​catorView,而不是你替换它,你必须使按钮边境自己。 我做的是设置的UIBarButtonItem的customView含有边境一个UIImageView,并添加活动视图,该图像的子视图。

这使得你获得的边界图像的问题。 如果你只需要一个栏的颜色,那么你可以裁剪出一个模拟器截图; 如果你需要它在多条的颜色,那么你会希望得到不只是边界像素,而且还边境透明度, 为此我写了一个Python脚本。



Answer 3:

这是不可能做你正在尝试做的UIBarButtonItems(与创建-initWithImage:style:target:action:-initWithTitle:style:target:action: )不支持按钮内任意的看法。

你可以试着放置在UIActivityIndicatorView上模拟一个按钮的边界图像的顶部。 然后,您可以使用initWithCustomView:到视图添加到您的按钮。

希望这可以帮助。



文章来源: UIBarButton with CustomView and a Border