0

ボタンがポイントに移動し、非表示がtrueに設定されるUIButtonアニメーションに取り組もうとしています。しかし、以下のコードをいじってみたところ、アニメーションが完成する前にボタンが消えてしまいました。私はそれを正しくやっていますか?助言がありますか?

[UIView animateWithDuration:0.8
                 animations:^{

                     selectedCurveIndex = 0;
                     [tradebutton moveTo:
                      CGPointMake(51,150) duration:0.8 
                                  option:curveValues[UIViewAnimationOptionCurveEaseInOut]];
                 }
                 completion:^(BOOL finished){ 

                     [tradeButton setHidden:TRUE];

                     UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
                     UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"ButtonView"];

                     self.modalPresentationStyle = UIModalPresentationCurrentContext;
                     [self presentModalViewController:vc animated:NO];

                 }];
4

2 に答える 2

1

先に進む前に、 finishedがYESに設定されていることを確認する必要があります。

0.8はアニメーションの長さが短いため、ボタンはすぐに非表示になります。ボタンを非表示にする別の場所を見つける必要があります。

これを試して:

[UIView animateWithDuration:0.8
                 animations:^{

                     selectedCurveIndex = 0;
                     [tradebutton moveTo:
                      CGPointMake(51,150) duration:0.8 
                                  option:curveValues[UIViewAnimationOptionCurveEaseInOut]];
                 }
                 completion:^(BOOL finished){ 

                     if ( finished ) 
                     {    
                         [tradeButton performSelector:@selector(setHidden:) withObject:@"YES" afterDelay:3.0];

                         UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
                         UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"ButtonView"];

                         self.modalPresentationStyle = UIModalPresentationCurrentContext;
                         [self presentModalViewController:vc animated:NO];
                     }
                 }];
于 2012-07-25T03:13:19.640 に答える
0

問題は、moveTo:duration:option:メソッド内に 2 番目の内側のアニメーション ブロックを作成し、その内側のブロックにすべてのアニメーション化可能なプロパティを設定することです。外側のブロックにはアニメート可能なプロパティを設定しません。

つまり、システムはすぐに外側のアニメーションが終了したと判断し、すぐに完了ブロックを呼び出します。その間、内側のアニメーション ブロックはまだ進行中です。

使用を中止してmoveTo:duration:option:ください。それはあなたにほとんど何も節約せず、このようなトラブルを引き起こします. それを捨てて、代わりに次のようなことを試してください:

[UIView animateWithDuration:0.8 animations:^{
    tradeButton.frame = (CGRect){ CGPointMake(51, 150), tradeButton.bounds.size };
} completion:^(BOOL finished) {
    tradeButton.hidden = YES;
    // etc.
}];

UIViewAnimationOptionCurveEaseInEaseOutがほとんどのアニメーションのデフォルトであることに注意してください。

于 2012-07-25T03:52:43.927 に答える