0

私はObjective-CとXcodeが初めてです...車(ImageView)を画面の上部に移動し、回転させてからディスプレイの下部に戻す方法を説明するチュートリアルに従っています。

これはコードです:

- (IBAction)testDrive:(id)sender {
      CGPoint center = CGPointMake(_car.center.x, self.view.bounds.origin.y + _car.bounds.size.height/2 +100);
      [UIView animateWithDuration:3
        animations:^ { _car.center = center;}
        completion:^(BOOL finished){[self rotate];}]; 
}

- (void) rotate{
      CGAffineTransform transform = CGAffineTransformMakeRotation(M_PI);

      void (^animation)() = ^() { _car.transform = transform;
      };

      void (^completion)(BOOL) = ^(BOOL finished){
        [self returnCar];
      };
     [UIView animateWithDuration:3 animations:animation completion:completion];
}

問題は、車が上に移動することですが、中心がデフォルトの中心値にリセットされたように、画面の下部で位置がリセットされ、その後回転するだけです..解決策が見つかりません.君の力が必要!

4

2 に答える 2

1

アニメーションを実行する場合、その効果は一時的なものであり、デフォルトではレイヤー/ビューを実際に変更することはありません。通常、完了ブロックのレイヤー/ビューに「終了」値を明示的に書き込みます。アニメーションの「チェーン」内のアニメーションごとにこれを行う必要があります。あなたのコードでは、これを行うと望ましい結果が得られると思います。

- (IBAction)testDrive:(id)sender {
      CGPoint center = CGPointMake(_car.center.x, self.view.bounds.origin.y + _car.bounds.size.height/2 +100);
      [UIView animateWithDuration:3
        animations:^ { _car.center = center;}
        completion:^(BOOL finished){ _car.center = center; [self rotate];}]; 
}

- (void) rotate{
      CGAffineTransform transform = CGAffineTransformMakeRotation(M_PI);

      void (^animation)() = ^() { _car.transform = transform;
      };

      void (^completion)(BOOL) = ^(BOOL finished){
        _car.transform = transform;
        [self returnCar];
      };
     [UIView animateWithDuration:3 animations:animation completion:completion];
}

また、対応する変更を で行う必要があります-returnCar

ここでの考え方は、アニメーションは「プレゼンテーション レイヤー」のみに影響し、「モデル レイヤー」には影響しないということです。モデル レイヤーにアニメーションの「後」の状態を反映させたい場合は、明示的に行う必要があります。

于 2013-09-22T23:27:47.530 に答える