2010-01-18 43 views
0

是否有任何方法将像Apple旋转设备这样的动画图像设置为UIBarButtonItem?iPhone SDK:将动画加载(齿轮)图像设置为UIBarButtonItem

我已经试过这行代码,但动画GIF图像不会玩:

myButton.image = [UIImage imageNamed:@"spinningGear.gif"]; 
+0

的尺寸上略有错了 - 虽然技术本身是好的 - 请参阅下面的修正 – Adam 2010-07-29 12:36:46

回答

2

尝试创建一个UIActivityIndicatorView并将其与-[UIBarButtonItem initWithCustomView:]分配给您的按钮。

+0

这是行不通的。我不知道你在哪里尝试过 - 在iOS 3中不起作用,并且似乎不适用于iOS 4或者 – Adam 2010-07-29 12:37:58

0

我不认为用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]; 

0

我发现,这条线是不正确的:

[[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(0, 0, 20, 20)]; 

...从苹果默认的刷新按钮的实际尺寸稍有不同。如果您有其他项目在该工具栏上进行自动布局,则需要正确设置尺寸。

不幸的是,苹果提供没有API找出大小。通过试验和错误,看来这是正确的:

[[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(0, 0, 28, 28)]; 
+0

您也可以'sizeToFit'然后查看'bounds'。 – kevboh 2012-02-23 20:57:05

0

我通过设置的UIBarButtonItem到一个UIButton的customView与图标图像,再加入UIActivityIndi​​cator作为的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]; 

的几个注意事项:

  1. 如果你不想更改按钮当它处于“活动”状态时,您可以删除addTarget和removeTarget行。
  2. 如果您不希望按钮处于“活动”状态时可点击,您可以省略活动指示器的userInteractionEnabled行(或删除目标并重新添加它)。
  3. 具有customView的UIBarButtonItem不会显示按钮边框。如果你想要这个边框,你必须制作自己的图像并将其添加为UIButton的背景图像。