2012-03-22 5 views
0

アニメーションメニューを作成したいと思います。最初のユーザが画面をタップしたとき、それはユーザーがそれをタップすることができ、それが何か IOS - アニメーションが応答しない

  • を行う
  • にスライドします画面
  • 外に隠されています

    • その後、3S後にそれが画面外
    をスライドさせます

    しかし、問題はそれをタップしたときの応答ではありません。どうして?

    サンプルコード:すべてのコードは、私のUIViewクラスにあります。

    showing = NO; 
    box = [[UIView alloc] initWithFrame:CGRectMake(500,-200,200,200)]; 
    box.backgroundColor = [UIColor redColor]; 
    
    UITapGestureRecognizer *tapBox = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapMenuHandler:)] autorelease]; 
    [box addGestureRecognizer:tapBox]; 
    
    [self addSubView:box]; 
    

    と:

    -(void) tapMenuHandler: (UIView *)obj { 
        //Do something 
        NSLog(@"tap box"); 
    } 
    

    と:

    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    if (!showing) { 
    
        box.frame = CGRectMake(500, -200, 200, 200); 
    
        [UIView animateWithDuration:0.5f delay:0.3f options:(UIViewAnimationOptionAllowUserInteraction) animations:^{ 
    
         box.frame = CGRectMake(500, 200, 200, 200); 
    
        } completion:^(BOOL finished) { 
         showing = YES; 
    
            [UIView animateWithDuration:0.5f delay:3.0f options:(UIViewAnimationOptionAllowUserInteraction) animations:^{ 
             box.frame = CGRectMake(500, -200, 200,200); 
            } completion:^(BOOL finished) { 
             showing = NO; 
            }]; 
    
        }];  
    } 
    

    }

    あなたの助けに感謝し、私の英語:)申し訳ありません

    編集:詳細 私はトリ私のボックスの起源を画面に表示します。 500,600)、私のボックスが別の位置に移動しても、開始点(500,600)でタップすると、常に応答します。

    更新: NSTimerを使用して画面外にボックスを移動する方法が変更されました。

    [UIView animateWithDuration:0.5f delay:0.3f options:UIViewAnimationOptionAllowUserInteraction animations:^{ 
    
         box.frame = CGRectMake(500,200,200,200); 
    
        } completion:^(BOOL finished) { 
         isShowMenubar = YES; 
         //use NSTimer instead of delay 
         [NSTimer scheduledTimerWithTimeInterval:3.0f target:self selector:@selector(hideBox) userInfo:nil repeats:NO]; 
    
        }]; 
    

    -(void)hideBox { 
    [UIView animateWithDuration:0.5f delay:0.0f options:UIViewAnimationOptionAllowUserInteraction animations:^{ 
        box.frame = CGRectMake(500,-200,200,200);} completion:^(BOOL finished) { 
         isShowMenubar = NO; 
        }]; 
    } 
    
  • +0

    を助け

    [self.view addSubview:box]; 

    希望すべきですか? – matzino

    +0

    マッツィーノに感謝します:)それは私の間違いです。私は自分のコードを編集しますが、それでも問題はあります。 – navinking2000

    +0

    あなたのtapMenuHandler-Methodの署名が間違っています。それは - (IBAction)tapMenuHandler:(UIGestureRecognizer *)のようなものでなければなりません。 IBActionまたはvoidは同じですが、送信者のパラメータはUIGestureRecognizerでなければなりません。あなたの問題を解決しますか? – matzino

    答えて

    3

    ボックスがタッチを受信して​​いない理由は、アニメーションがどのように機能するかに関係しています。ボックスは実際にはオフスクリーンですが、視覚的にはアニメーションを通過しています。

    遅延を3.0に設定しても、(アニメーション方法がまだ呼び出されているため)あらかじめボックスを移動しています。だからあなたの現在のコードでは、(500、-200)でボックスをタップすると、それは接触を受け取ります。

    この問題を解決するには、NSTimerまたはGrand Central Dispatchを使用して遅延させてください。

    NSTimer:

    [NSTimer scheduledTimerWithTimeInterval:3.0 target:self action:@selector(dismissBox) userInfo:nil repeats:NO]; 
    

    NSTimerの問題点は、別の方法でそのアニメーションのコードを配置する必要がありますということです。

    グランドセントラル派遣:

    double delayInSeconds = 3.0; 
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); 
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
        [UIView animateWithDuration:0.5f animations:^{ 
         box.frame = CGRectMake(box.frame.origin.x, -200, 200,200); 
    
        }completion:^(BOOL finished) { 
         showing = NO; 
        }]; 
    }); 
    
    +0

    こんにちはKevin、もう一度私の間違いです。私の実際のコードはあなたが言っているのと同じです。私は既に上で編集しました。 – navinking2000

    +0

    ああ!私はあなたがそれが箱を提示していないことを意味したと思ったが、あなたは箱を叩くことを意味した。私の答えを変更しました。 –

    +0

    ケビン!大変ありがとうございます。それは私の問題を解決した – navinking2000

    0

    私は、コードを実行し、いずれかの赤のビューが表示されませんでした。その後、ちょっと遊んで、私はあなたのビューがアニメーション化しているが、まだそれはあなたがそれを見ることはないので、範囲外です。

    box.frame = CGRectMake(100, 100, 200, 200); 
    

    (フレームの原点は左下隅にある)のようなものにアニメーションブロックを変更しようとすると、うまくいけば、それはアニメーションを来ります。

    また、あなたはあなたのビューコントローラでこれらを実行することを想定し、正しい方法では、これはあなたがあなたのTapGestureRecognizerに設定しtapMenuHandler-メソッドを実装してください

    +0

    こんにちはKaan。あなたの助けていただきありがとうございますが、私はボックスを画面外でアニメーションを開始したいです。 – navinking2000

    +0

    私は理解していますが、あなたのボックスは境界線から外れています(左下隅にはx座標が500なので)、範囲外になります(x値はアニメーション内で決して変化しないので)。 iPhoneの画面サイズは320ピクセルです。ですからred-boxの中央に配置したい場合は、viewDidLoad(ini​​tを呼び出すとき)とアニメーションブロックの両方でx値を60に変更する必要があります。それを試してみてください –

    +0

    大変申し訳ありませんが、私アプリはipad(ランドスケープ)で実行されました。 – navinking2000