5

UIViewを拡張するクラスにアニメーションコードがあります。

// Start Animation Block
CGContextRef context = UIGraphicsGetCurrentContext();
[UIView beginAnimations:nil context:context];
[UIView setAnimationTransition: UIViewAnimationTransitionFlipFromLeft forView:[self superview] cache:YES];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDuration:1.0];

//int nextView = currentView + 1;
// Animations
[[self superview] exchangeSubviewAtIndex:0 withSubviewAtIndex:1];
//And so I would do: [[self superview exchangeSubviewAtIndex:currentView withSubviewAtIndex:nextView];
//Doesn't work because curentView is not global... with each instance of a class it's reset to what it's instanciated to. 
//currentView++;

// Commit Animation Block
[UIView commitAnimations];

このアニメーションコードは、2つのビューで正常に機能します。しかし、私は多くのビューに対してこれを実行しようとしています。グローバル変数(nextviewインデックスとcurrentViewインデックス)を追加してみましたが、各カスタムビュークラスには独自のインスタンスがあり、これらの変数は共有されていないため、これは機能しません。

私がやりたいことをどのように達成できるか誰かが知っていますか?

ありがとう!

編集:[自己スーパービュー]を使用して現在のビューと次のビューのインデックスにアクセスできれば、これを行うことができます。これを行う方法はありますか?

4

4 に答える 4

5

Apple には、ビュー遷移に関する非常に優れたチュートリアルがあります。それらを実装する方法以外に、一連のビューとそれらの間の遷移を管理する UINavigationController の使用も確認できます。

基本的に、ビューではなくスーパービューでトランジションを管理する必要があります。スーパービューは、現在表示されているユーザーと次のユーザーを認識できます。

于 2008-10-26T23:02:35.230 に答える
2

切り替えようとしているビューへのポインターがある場合は、「元」ビューで -removeFromSuperview を呼び出し、スーパービューで -addSubview:(「先」ビュー) を呼び出すだけです。遷移は特定のメソッド呼び出しに依存しません。多かれ少なかれ、「2 つのビューを入れ替える」アプローチは適切にアニメーション化されます。

于 2008-10-26T21:49:21.290 に答える
1

iOS 4.0 以降をサポートしているこの質問を見つけた人のために、Apple はこのタスク用の組み込み API を提供しています。

参照: transitionFromView:toView:duration:option:completion:

于 2012-03-04T17:45:18.797 に答える
0

ビューのリンクされたリストは、実装について考える必要があると思います。

于 2008-10-26T21:35:47.247 に答える