7

ナビゲーション バーの特定のサブビューのアルファをアニメーション化する際に、いくつかの問題が発生しています。バーの初期状態は次のとおりです。

ここに画像の説明を入力

これが私が今までにどこまで到達したかです:

ここに画像の説明を入力

問題は、検索がアクティブなときに、この「スター」、「新規」、およびその他の丸いボタンをすべて透明にする必要があることです (アルファをゼロに減らす必要があります)。デリゲートの次のメソッドでそれらを透過的にしようとしています:

- (void)searchBarCancelButtonClicked:(UISearchBar *)asearchBar
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar

それらのすべてで、まったく同じコードを実行します。

//parent is just a pointer of a search delegate, which points to view controller

for (UIView * someViewToFade in parent.navigationController.navigationBar.subviews) {
  if (someViewToFade.tag == 88 || someViewToFade.tag == 11) {
    NSLog("someViewToFade.alpha before changes = %f", someViewToFade.alpha);
    someViewToFade.alpha = 0.0; //or 1.0, depending on the method
  }
}

ただし、この方法では目的の結果を達成できませんでしたが、その NSLog で正しいアルファ値を取得していますが、ボタンはまったくフェードしません。私が間違っている可能性があることについて何か提案はありますか?

編集1:

私の場合、ビュー階層の説明を追加する必要があると思います。さて、これらの丸いボタンと 2 つの UIImageView、セグメント化されたコントロールの背景、および三角形のポインターを保持する UISegmentedConrol があります。これらのビューはすべて、サブビューとしてナビゲーション バーに追加されます。また、検索バーを保持する長方形のビューもあり、後でナビゲーション バーにサブビューとして追加されるため、階層のトップ ビューになります。また、スーパービューのフレームをアニメーション化するだけで searchBar をアニメーション化しています (デリゲートで上記のイベントが発生したときに、フレームを拡大または縮小します)。必要な情報をすべて提供したことを願っています。

4

2 に答える 2

1

私がiosプログラミングをしてからしばらく経ちました。アルファを設定していても、再描画をトリガーしていない可能性があります。[UIView setNeedsDisplay] は、次の描画サイクルで描画を更新するのに役立つ場合があります。

参考までに: UIView を強制的に再描画する最も堅牢な方法は何ですか?

于 2013-03-26T19:27:27.770 に答える