是否有任何方法将像Apple旋转设备这样的动画图像设置为UIBarButtonItem?iPhone SDK:将动画加载(齿轮)图像设置为UIBarButtonItem
我已经试过这行代码,但动画GIF图像不会玩:
myButton.image = [UIImage imageNamed:@"spinningGear.gif"];
是否有任何方法将像Apple旋转设备这样的动画图像设置为UIBarButtonItem?iPhone SDK:将动画加载(齿轮)图像设置为UIBarButtonItem
我已经试过这行代码,但动画GIF图像不会玩:
myButton.image = [UIImage imageNamed:@"spinningGear.gif"];
尝试创建一个UIActivityIndicatorView
并将其与-[UIBarButtonItem initWithCustomView:]
分配给您的按钮。
这是行不通的。我不知道你在哪里尝试过 - 在iOS 3中不起作用,并且似乎不适用于iOS 4或者 – Adam 2010-07-29 12:37:58
我不认为用UIBarButtonItem是可能的。
您可能想要使用customView
作为该属性(),并使用UIImageView
作为该视图。这仍然不会动画GIF的“开箱即用”(只是检查)。
如果你这样做,你有两个选择:
animatedImages
从UIImageView类,并使用单独的图像,每帧(写出头 - 代码可能有一些错误):
NSMutableArray * imgs = [NSMutableArray array];
for(int i = 0; i < NUMBER_OF_FRAMES; i++) {
[imgs addObject: [UIImage imageNamed: [NSString stingWithFormat: @"anim%d.png", i]]];
}
UIImageView * imgview = [[UIImageView alloc] init];
imgview.animatedImages = imgs;
[imgview startAnimating];
UIImageView
出来的GIF图像从这个位置http://blog.stijnspijker.nl/2009/07/animated-and-transparent-gifs-for-iphone-made-easy我发现,这条线是不正确的:
[[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(0, 0, 20, 20)];
...从苹果默认的刷新按钮的实际尺寸稍有不同。如果您有其他项目在该工具栏上进行自动布局,则需要正确设置尺寸。
不幸的是,苹果提供没有API找出大小。通过试验和错误,看来这是正确的:
[[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(0, 0, 28, 28)];
您也可以'sizeToFit'然后查看'bounds'。 – kevboh 2012-02-23 20:57:05
我通过设置的UIBarButtonItem到一个UIButton的customView与图标图像,再加入UIActivityIndicator作为的UIButton的子视图这样做。
要设置它,我只需将UIButton拖到Interface Builder中的UIBarButtonItem(您也可以在代码中执行此操作)。然后,以显示活动的指标:
UIButton *customButton = (UIButton *)self.refreshButton.customView;
[customButton setImage:nil forState:UIControlStateNormal];
[customButton removeTarget:self action:@selector(buttonAction) forControlEvents:UIControlEventTouchUpInside];
[customButton addTarget:self action:@selector(altButtonAction) forControlEvents:UIControlEventTouchUpInside];
self.activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
self.activityIndicator.frame = CGRectMake(round((customButton.frame.size.width - 25)/2), round((customButton.frame.size.height - 25)/2), 25, 25);
self.activityIndicator.userInteractionEnabled = FALSE; // this allows the button to remain tappable
[customButton addSubview:self.activityIndicator];
[self.activityIndicator startAnimating];
,并返回到默认的按钮状态:
UIButton *customButton = (UIButton *)self.refreshButton.customView;
[customButton setImage:[UIImage imageNamed:@"IconRefresh"] forState:UIControlStateNormal];
[customButton removeTarget:self action:@selector(altButtonAction) forControlEvents:UIControlEventTouchUpInside];
[customButton addTarget:self action:@selector(buttonAction) forControlEvents:UIControlEventTouchUpInside];
[self.activityIndicator removeFromSuperview];
[self.activityIndicator release];
的几个注意事项:
的尺寸上略有错了 - 虽然技术本身是好的 - 请参阅下面的修正 – Adam 2010-07-29 12:36:46