15

これが私の設定です:

ListViewController を含むストーリーボードがあります。ListViewController には、EmptyListView というサブビュー UIView があります。EmptyListView は、UITableView にアイテムがない場合にのみ表示され、それ以外の場合は非表示になります。

EmptyListView には、私の UITableView に新しいエントリを作成するボタンを視覚的に指す emptyListViewArrow と呼ばれるサブビュー UIImageView があります。この矢印は、上下に無限にアニメーション化されます。

サブビューのレイアウトが完了したら、EmptyListView が通知を送信するのをリッスンします。そうしないと、制約を変更するアニメーションが正しく動作しないためです。

- (void) layoutSubviews {
    [super layoutSubviews];

    [[NSNotificationCenter defaultCenter] postNotificationName:@"EmptyViewDidLayoutSubviews" object:nil];
}

ListViewController がこの通知を観察すると、アニメーションが開始されます。

[UIView animateWithDuration:0.8f delay:0.0f options:(UIViewAnimationOptionRepeat | UIViewAnimationOptionAutoreverse) animations:^{
    self.emptyListViewArrowVerticalSpace.constant = 15.0f;
    [emptyListView layoutIfNeeded];
} completion:nil];

アプリをバックグラウンドに置くか、別の ViewController をスタックにプッシュすると、アプリまたは ListViewController に戻ると、アニメーションが停止/一時停止します。私はそれを再び開始することはできません。

私はもう試した:

  1. アプリケーションをリッスンすると、辞任/アクティブになります。辞任するとき、[self.view.layer removeAllAnimations] を実行してから、上記のコードを使用してアニメーションを再度開始しようとしました。
  2. アニメーション化されている UIImageView を削除し、親ビューに追加してから、アニメーションを開始しようとしました。

ここで制約を使用したことを後悔していますが、何が問題なのかについての洞察が欲しいです。

ありがとうございました!

4

5 に答える 5