具有CustomView和边框的UIBarButton
我已经subclassed UIBarButtonItem,并试图做一个button,通常刷新图像,但加载时的活动微调。 我有的问题是我无法得到有边框的样式,以显示一个自定义视图里面。 它只是不显示。
这是我的代码(从我的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;
有没有理由不工作?
在iOS5中,将animation图像放入UIBarButtonItem
并维护UIBarButtonItemStyleBordered
是一个技巧:
UIImage *image = [UIImage animatedImageNamed:@"refresh-" duration:1.f]; self.button = [[UIBarButtonItem alloc] initWithImage:image style:UIBarButtonItemStyleBordered target:self action:@selector(doSomething:)];
然后,创build一组图像,为animation的每一帧创build一个图像,然后命名为“refresh-0.png”,“refresh-1.png”等等。
当您想要停止animation时,请使用静态版本replace该button的图像:
self.button.image = [UIImage imageNamed:@"refresh-0.png"];
要自己创build所有这些图像仍然是一个很大的麻烦,但它可能比创build自己的Button-border背景更加一致。
要使用UIActivityIndicatorView来完成这个任务,而不是replace它,你必须自己渲染button边框。 我所做的是将UIBarButtonItem的customView设置为包含边框的UIImageView,然后将活动视图添加为该图像的子视图。
这让您面临获取边框图像的问题。 如果你只需要一个条形的颜色,那么你可以把它从模拟器的截图中剪出来; 如果你需要多栏颜色,那么你不仅需要获取边界像素,还需要获得边界透明度, 为此我编写了一个Python脚本。
由于UIBarButtonItems(使用-initWithImage -initWithImage:style:target:action:
或-initWithTitle:style:target:action:
)不支持button内部的任意视图,因此不可能完成要做的事情。
您可以尝试将UIActivityIndicatorView
放置在模拟button边框的图像上。 然后,您可以使用initWithCustomView:
将视图添加到您的button。
希望这可以帮助。