0

わかりましたので、UIView をサブクラス化し、ビューには多数のサブビューがあります。これらのサブビューはアニメーション化されています。別のView Controllerを上に押すか、アプリがバックグラウンドになると、アニメーションが停止します。

サブビューでこれらのアニメーションを再開する正しい方法は何ですか? View ControllerにViewに再起動を指示させたくありません。別のオブジェクトから明示的に指示されなくても、いつ再起動する必要があるかをViewが認識できるようにする必要があるからです。

しかし、発生しているアニメーションが新しい UIImageViews を追加しているため、サブクラス化された UIView で layoutSubviews を使用することはできません。その場合、UIView サブクラスで layoutSubviews が呼び出されます。そのため、layoutSubviews が頻繁に呼び出され、それを使用してアニメーションを再開することはできません。

考え?

更新 - アニメーション コードは次のようになります...しかし、それは本当に重要ではないと思います。

[UIView animateWithDuration:ANIMATION_DURATION delay:0 options:UIViewAnimationOptionCurveLinear     animations:^{
    [subview setFrame:finalFrame];
} completion:^(BOOL finished) {
    [subview removeFromSuperview];
}];
4

2 に答える 2

0

NSNotificationCenter を使用して、View Controller が再び起動したことを次のようにビューに通知します。

UIView で、これを init メソッドに追加します。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(methodToExecuteWhenUIViewControllerComesBackUp:) name:@"Came Back" object:nil];

次に、「その他のviewController」で、元のコントローラーを再度提示するメソッドに次を追加します。

[[NSNotificationCenter defaultCenter] postNotificationName:@"Came Back" object:nil];

次に、元のviewControllerを提示すると、UIViewに通知されます。再アニメートするサブビューごとに、最初のコードを繰り返します。

メモリのためにサブビューが削除(解放)された場合は、必ず次を実行してください。

[[NSNotificationCenter defaultCenter] removeObserver:self];

上記のコードが実行されない場合、通知センターは存在しないオブジェクトに通知しようとするため、アプリがクラッシュします。

于 2013-03-23T02:56:35.840 に答える
0

使わないで、使っUIView AnimationたほうがいいCore Animation

それには、デフォルトで( ) に設定されCAAnimationているというプロパティがあり、アプリを から にします。アニメーションもremovedOnCompletionYESNOyourCAAnimation.removedOnCompletion = NO;backgroundforegroundanimated

アップルは次のように述べています。

完了時に削除

Determines if the animation is removed from the target layer’s animations upon completion.

@property(getter=isRemovedOnCompletion) BOOL removedOnCompletion
Discussion
When YES, the animation is removed from the target layer’s animations once its active duration has passed. Defaults to YES.

Availability
Available in iOS 2.0 and later.
Related Sample Code
MoveMe
Declared In
CAAnimation.h
于 2013-03-23T02:57:54.783 に答える