2012-01-22 12 views
1

Xcodeで完全に動作するビューアニメーションがあります(CGRectでボタンをクリックして画面をスライドさせます)。残念ながら、ボタンを2回クリックしてアニメーションを実行する必要があります。私は何を間違えたのですか?私は、任意のフィードバックボタンが1回ではなくダブルクリックで起動する

はここに私の.Hコードが

@interface AnimationBlocksViewController : UIViewController{ 
    IBOutlet UIView *theview; 
    IBOutlet UIView *theview2; 

    BOOL isAnimated; 
    BOOL switchback; 
} 

-(IBAction)animate:(id)sender; 
-(IBAction)change:(id)sender; 

だ。ここに私.Mコードが

-(IBAction)animate:(id)sender;{ 
    if (isAnimated) { 

     [UIView beginAnimations:nil context:NULL]; 
     [UIView setAnimationCurve:UIViewAnimationCurveEaseOut]; 
     [UIView setAnimationDuration:0.5]; 
     [theview setFrame:CGRectMake(0, 0, 320, 460)]; 
     [theview2 setFrame:CGRectMake(320, 0, 320, 460)]; 
     [UIView commitAnimations]; 
     isAnimated=NO; 

    } 


    else{ 

     [UIView beginAnimations:nil context:NULL]; 
     [UIView setAnimationCurve:UIViewAnimationCurveEaseOut]; 
     [UIView setAnimationDuration:0.5]; 
     [theview setFrame:CGRectMake(-320, 0, 320, 460)]; 
     [theview2 setFrame:CGRectMake(0, 0, 320, 460)]; 
     [UIView commitAnimations]; 
     isAnimated=YES; 

    } 
} 

-(IBAction)change:(id)sender;{ 
    if (switchback) { 

     [UIView beginAnimations:nil context:NULL]; 
     [UIView setAnimationCurve:UIViewAnimationCurveEaseOut]; 
     [UIView setAnimationDuration:0.5]; 
     [theview2 setFrame:CGRectMake(0, 0, 320, 460)]; 
     [UIView commitAnimations]; 
     switchback=NO; 

    } 


    else{ 

     [UIView beginAnimations:nil context:NULL]; 
     [UIView setAnimationCurve:UIViewAnimationCurveEaseOut]; 
     [UIView setAnimationDuration:0.5]; 
     [theview2 setFrame:CGRectMake(320, 0, 320, 460)]; 
     [theview setFrame:CGRectMake(0, 0, 320, 460)]; 
     [UIView commitAnimations]; 
     switchback=YES; 

    } 
} 

だそれは動作しますが、私はアニメーションをトリガするためにダブルクリックする必要があり、私が間違って何をした感謝します? ありがとう

答えて

0

最初のダブルクリック後に、シングルクリックするとアニメーションが正しくトリガーされますか?その場合は、BOOL変数を明示的に初期化していない可能性がありますが、デフォルトはNOに設定する必要があります。それを試して、それが役立つかどうかを確認してください。

アニメーションを作成するのに常に2回タップする必要がある場合は、実行ループの呼び出しを挿入して、アプリケーションスレッドで実行した後にアニメーションのみを処理しているかどうか試してみてください。 2番目のクリックイベントを処理するには、実際に移動して保留中のアニメーションを取り出して実行しますか? (あなたがcommitAnimationsisAnimatedを設定して呼び出した後)そのためのコードは次のようになります。

[[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate date]]; 

あなただけの日付のnilを使用しますが、あなたが好きすぎた場合、その試みることができるかどうかわかりません。

+0

私はこれらのアニメーションの状態を変更し、何が起こるかを見てみましょう。ボタンは現在、ダブルクリックでビューをアニメートします –

+0

はい!出来た!私のボタンのアニメーションの状態を変更すると、問題が解決しました。darvidsOn –

+0

(私はすべてのアニメーション状態をNOに変更しました –

関連する問題