0

Apple 回転ギアのようなアニメーション画像を UIBarButtonItem に設定する方法はありますか?

このコード行を試しましたが、アニメーション gif 画像が再生されません:

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

4 に答える 4

2

を作成し、UIActivityIndicatorViewでボタンに割り当ててみてください-[UIBarButtonItem initWithCustomView:]

于 2010-01-18T22:33:26.257 に答える
0

この行が正しくないことがわかりました。

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

...Appleのデフォルトの[更新]ボタンの実際のサイズは少し異なります。そのツールバーで自動レイアウトを実行している他のアイテムがある場合は、適切なサイズを取得する必要があります。

残念ながら、Appleはサイズを見つけるためのAPIを提供していません。試行錯誤により、これは正しいようです。

[[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(0, 0, 28, 28)];
于 2010-07-29T12:36:21.763 に答える
0

これを行うには、UIBarButtonItemのcustomViewをアイコン画像付きのUIButtonに設定し、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の背景画像として追加する必要があります。
于 2013-02-24T21:41:47.473 に答える
0

UIBarButtonItem ではそれが可能だとは思いません。

customViewそのために(プロパティまたはinitWithCustomView)使用UIImageViewし、そのビューとして使用することをお勧めします。それはまだgifの「箱から出して」(ちょうどチェックされた)アニメーション化されません。

その場合、次の 2 つのオプションがあります。

  • UIImageView クラスから使用animatedImagesし、フレームごとに個別の画像を使用します (頭から書き出す - コードにエラーがある可能性があります)。

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];

于 2010-01-18T22:53:37.520 に答える