これが私の設定です:
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 に戻ると、アニメーションが停止/一時停止します。私はそれを再び開始することはできません。
私はもう試した:
- アプリケーションをリッスンすると、辞任/アクティブになります。辞任するとき、[self.view.layer removeAllAnimations] を実行してから、上記のコードを使用してアニメーションを再度開始しようとしました。
- アニメーション化されている UIImageView を削除し、親ビューに追加してから、アニメーションを開始しようとしました。
ここで制約を使用したことを後悔していますが、何が問題なのかについての洞察が欲しいです。
ありがとうございました!