0

これは本当に初心者に聞こえるかもしれませんが、私はこの問題と格闘するのに丸一日を費やしました。

ゲームプレイ内で複数回呼び出すメソッドがあることがわかります。私が使用すると、1[self myMethod];回だけ機能します。そして、もう一度呼び出すと、メソッドのアニメーションはもう開始されません。

私が必要とするのは、アニメーションを機能させるために「自己」を「割り当て」および「解放」できる代替に置き換えることです。

私はもう試した;

@implementation gameViewController


gameViewController *object = [[gameViewController alloc] init];

[object myMethod];

ただし、上記の self の代用は、メソッドを呼び出すことさえありません。何を間違えたのかわかりませんが、「self」と同じように機能するはずです。

私が逃したものはありますか?クラスのオブジェクトを「自己」と同じように機能させるにはどうすればよいですか?

本当にありがとう。

これが私のコードのより詳細な外観です。

[自己爆発アニメーション];

- (void) explosionAnimations
{


      UIImage *image = [UIImage imageNamed: @"Yellow Explosion.png"];

      [bomb setImage:image];   

      [UIView beginAnimations:@"bomb1ExplosionIncrease" context:NULL];

      [UIView setAnimationDuration:0.5];

      [UIView setAnimationDelegate:self];

      bomb.transform = CGAffineTransformMakeScale(3.4, 3.4);

      [UIView commitAnimations];

}

setImage は毎回正常に動作します。しかし、メソッドの 2 回目の呼び出しでアニメーションが停止します。コンソールでは、「アニメーションが完了しました」とログに記録され、画像には何も起こりません。

これは、どういうわけか「自己」がアニメーションがすでに行われていると信じており、もう一度やり直すつもりはないと私に信じさせます. だから私は、新しい「割り当て」がそれを目覚めさせるかもしれないと思った.

4

1 に答える 1

5

問題は「自分」とは何の関係もありません。問題は、アニメーションで変換を設定し、再度実行すると同じ変換を設定しているため、何もしないことです。アニメーションを再度実行する前に、フレームを新しいフレームにリセットし、変換を恒等変換に戻す必要があります。また、ブロック ベースのアニメーションを使用する必要があります。これが最善の方法かどうかはわかりませんが、これでうまくいきました(自動レイアウトがオフになっている場合)。

- (void)explosionAnimations {

    UIImage *image = [UIImage imageNamed: @"Yellow Explosion.png"];
    [self.bomb setImage:image];

    [UIView animateWithDuration:.5 animations:^{
        self.bomb.transform = CGAffineTransformMakeScale(3.4, 3.4);
    } completion:^(BOOL finished) {
        CGRect newFrame = self.bomb.frame;
        self.bomb.transform = CGAffineTransformIdentity;
        self.bomb.frame = newFrame;
    }];
}

自動レイアウトがオンになっているアプリでこれを行っている場合 (デフォルトではオンになっています)、変換は使用せず、高さと幅の制​​約を調整して画像ビューの幅と高さを変更します。したがって、このメソッドでは、IBOutlets を IB で作成した高さと幅の制​​約に合わせて作成し、アニメーション ブロックでそれらの定数値を変更する必要があります。

[UIView animateWithDuration:.5 animations:^{
        self.heightCon.constant = self.heightCon.constant * 3.4;
        self.widthCon.constant = self.widthCon.constant * 3.4;
        [self.view layoutIfNeeded];
    }];
于 2013-07-27T16:16:43.337 に答える