6

これは、stackoverflowに関する私の最初の投稿です。私はiOS開発者の初心者であり、英語を母国語としないので、問題を説明するために最善を尽くします。

問題:

AppDelegateウィンドウに2つのビューを追加しましたが、次を使用して一方から他方に切り替えたいと思います。

 UIView transitionFromView:toView:

最初のビュー(MainScreenView)には独自のがありViewControllerます。MainScreenView .xibファイルには、AppDelegateに実装されているメソッド「goShow」を呼び出すアクションを持つボタンがあります。その方法ではUIView transitionFromView:toView:、2番目のビューに移行するために使用します。これまでのところ、すべてが正常に機能しています。2番目のビュー(スクロールビュー)は、AppDelegateでプログラムによって宣言され、その中に一連の画像(picturesViewController)があり、その上に。がありUIPinchGestureRecognizerます。

ジェスチャレコグナイザを使用して、MainScreenViewに戻ります。ここに問題があります。スクロールビューでピンチジェスチャを実行するとMainScreenView.view、アニメーションの直前にが表示されるため、フリップアニメーションが正しく表示されません。

私が使用しているコードは次のとおりです。

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

mainScreen = [[MainScreenViewController alloc] initWithNibName:@"MainScreenViewController" bundle: [NSBundle mainBundle]];

CGRect frame = self.window.bounds;
int pageCount = 10;
scrollView = [[UIScrollView alloc] initWithFrame:frame];
scrollView.contentSize = CGSizeMake(320*pageCount, 480);
scrollView.pagingEnabled = YES;
scrollView.showsHorizontalScrollIndicator = FALSE;
scrollView.showsVerticalScrollIndicator = FALSE;
scrollView.delegate = self;

[...] 'While' adding pictures to de scrollView

UIPinchGestureRecognizer *twoFingerPinch = [[[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(goBackToMain)] autorelease];
[scrollView addGestureRecognizer:twoFingerPinch];

[self.window addSubview: scrollView];
[scrollView setHidden:TRUE];
[self.window addSubview: mainScreen.view];

[self.window makeKeyAndVisible];
return YES;
}

-(void) goShow{

[UIView transitionFromView:mainScreen.view
                    toView:scrollView 
                  duration:0.5
                   options:UIViewAnimationOptionTransitionFlipFromRight | UIViewAnimationOptionShowHideTransitionViews                    
                completion:NULL];

[UIView commitAnimations];    
}

-(void) goBackToMain {

[UIView transitionFromView:scrollView
                    toView:mainScreen.view 
                  duration:0.5
                   options:UIViewAnimationOptionTransitionFlipFromRight | UIViewAnimationOptionShowHideTransitionViews                     
                completion:NULL]; 

[UIView commitAnimations];
}

addSubview/removeFromSuperViewアニメーションが失敗するのとまったく同じ手順で、追加と削除を試し、ピンチジェスチャでアプリがクラッシュしたため、代わりに表示/非表示ビューを使用しています。おそらく同じエラーですが、その理由を見つけることができません。どんな助けでもいただければ幸いです。

ありがとう。

Ok。エイドリアンの助けを借りて、これが私の問題を解決したUIPinchGestureコードです:

[...]

UIPinchGestureRecognizer *twoFingerPinch = [[[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(goBackToMain:)] autorelease];
[scrollView addGestureRecognizer:twoFingerPinch];


-(void)goBackToMain:(UIPinchGestureRecognizer *)recognizer {

if (recognizer.state == UIGestureRecognizerStateEnded)
{
    [UIView transitionFromView:scrollView
                        toView:mainScreen.view 
                      duration:0.4
                       options:UIViewAnimationOptionTransitionFlipFromRight | UIViewAnimationOptionShowHideTransitionViews                     
                    completion:nil]; 

    [UIView commitAnimations];
}
4

2 に答える 2

1

beginAnimation commitAnimationまず、古いメソッドの組み合わせと新しいブロックメソッドを混在させることはできませんtransitionFromView

次に、ブロックメソッドアニメーションを使用する場合は、切り替えたい2つのビューの親となるコンテナ(おそらくUIView)を使用していることを確認してください。コンテナがないと、代わりにビュー全体をアニメーション化することになります。コンテナが、切り替わるサブビューと同じサイズであることを確認してください。

例:

    [コンテナaddSubView:frontView];
    [コンテナaddSubView:backView];

    [self.view addSubView:container];

    [UIView transitionFromView:backView toView:frontView duration:0.5 options:UIViewAnimationOptionTransitionFlipFromRight complete:nil];

于 2013-10-11T11:07:30.277 に答える
0

iOSのアニメーションについてもっと読む

あなたの例では、あなたは忘れ[UIView beginAnimations]ました。

于 2012-02-26T19:52:17.353 に答える