2012-01-14 12 views
0

ボタンが1つ選択されたときにフェードアウトするUIButtonとUILabelsのセットがあります。正しいボタンです。アニメーションブロック中にUIButtonsがフェードアウトしない

私は多くのことを試してきました(コードブロックでコメントしました)、UILabelsだけがフェードアウトします。私はここで何が欠けていますか?

-(IBAction)answerButtonPressed:(UIButton *)sender { 
NSLog(@"Game Question Answer Pressed: %i", sender.tag); 
NSLog(@"%@", sender.titleLabel.text); 

int selectedAnswer =0; 
selectedAnswer = [question.answer intValue]; 

if (selectedAnswer == sender.tag) { 
    NSLog(@"GameQ %@ is the correct answer", sender.titleLabel.text); 

    //self.toggleView; 

    [labelA setAlpha:0]; 
    [labelB setAlpha:0]; 
    [labelC setAlpha:0]; 
    [labelD setAlpha:0]; 


    /* 
    [buttonA setAlpha:0]; 
    [buttonB setAlpha:0]; 
    [buttonC setAlpha:0]; 
    [buttonD setAlpha:0]; 

    [buttonA setHidden:YES]; 
    [buttonB setHidden:YES]; 
    [buttonC setHidden:YES]; 
    [buttonD setHidden:YES]; 
    */   
    [sender setAlpha:1]; 
    [sender setHidden:NO]; 

    [[UIApplication sharedApplication] beginIgnoringInteractionEvents]; 
    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:1.5]; 

    [UIView animateWithDuration:2.0 
          delay:0.0 
         options: UIViewAnimationCurveEaseOut 
        animations:^{buttonA.alpha = 0;} 
        completion:nil]; 

    [UIView setAnimationDelegate:[UIApplication sharedApplication]]; 
    [UIView setAnimationDidStopSelector:@selector(endIgnoringInteractionEvents)]; 

    [UIView commitAnimations]; 

私はそれ以降、このメソッドをクリーンアップし、1つのタイプのアニメーションブロックのみを使用しました。 UIButtonはまだフェードアウトしませんが、ラベルはそのままです。ここに私がアニメーションブロックとして持っているものがあります:

 [UIView animateWithDuration:2.0 
          delay:0.0 
         options: UIViewAnimationCurveEaseOut 
        animations:^{buttonA.alpha = 0;} 
        completion:nil]; 

    [UIView animateWithDuration:2.0 
          delay:0.0 
         options: UIViewAnimationCurveEaseOut 
        animations:^{labelA.alpha = 0;} 
        completion:nil]; 

答えて

9

私はバットから気づいたものをカップルします。 2種類のアニメーション技法を組み合わせています。古いものと新しい:

いずれかの操作を行います。あなたが持っているよう

[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:1.5]; 

buttonA.alpha = 0; 

[UIView commitAnimations]; 

OR(と、それは "近代的な" 方法であるとして好ましい)

[UIView animateWithDuration:2.0 
         delay:0.0 
        options: UIViewAnimationCurveEaseOut 
       animations:^{buttonA.alpha = 0;} 
       completion:nil]; 

は、2を組み合わせることは、おそらく原因となります第1のアニメーション技法が第2のアニメーション技法を補間するので何度も呼び出されるブロック。基本的には、多くのアニメーションをキューに入れて、ボタンを0にすばやくフェードアウトさせます。

さらに、既定では(少なくともブロックを使用して)、ユーザーの操作は既定で無効になっています。それを明示的に行う必要はありません。

+0

私はこのメソッドをクリーンアップし、より "近代的な"メソッドを行うことを提案しました。それでもボタンは残っていますが、ラベルは前と同じように消えます。何かが克服しなければなりませんか?最初の投稿の私の編集を見てください。 – Nungster

+0

変更したいものすべてに複数のブロックが必要なわけではありません。あなたはあなたのlabelA.alpha = 0を置くことができます。あなたのbuttonA.alpha = 0;同じブロックにあります。あなたは、インターフェイスビルダーのボタンインスタンスにbuttonAを接続してもよろしいですか?私。今は無名ですか? – MarkPowell

+0

LOL私はそんなにばかです。はい、私はID送信者とメソッドをメッセージしていたので、私は自分のレファレンスアウトレットを配線する必要はありませんでした。今度は私がメッセージを伝える必要があったので、チェックして、ペン先は配線されていませんでした。 – Nungster

関連する問題