0

画像の移動、回転、サイズ変更の 3 つのことを一度に実行するアニメーションを実行しようとしています。

平行移動とサイズ変更の 2 つを同時に行うことができます。ただし、次のコードの最後にローテーションを追加すると、無視されます。コードの先頭に配置すると、サイズの変更は無視されます。view.transform を使用して複合トランジションを実行できると読みましたが、それを機能させることができませんでした。

これが私の現在のコードです:

CGPoint destPoint = CGPointMake(-100,-50);
 float radians =[self Degrees2Radians:-35];
 [UIView animateWithDuration:2 
                 animations:^{
                     //TRANSLATE
                     self.imageView.center = CGPointMake(self.imageView.center.x + destPoint.x, self.imageView.center.y + destPoint.y);

                     //ROTATE
                      self.imageView.transform = CGAffineTransformMakeRotation(radians);

                  //SCALE

                     self.imageView.transform = CGAffineTransformMakeScale(0.2, 0.2); // here the final size will be 20%

                 }
                 completion:nil
 ];

}

3つすべてを同時に発生させる方法を誰でも推奨できますか?

ビューの変換プロパティを使用するSwiftのコードを次に示しますが、Objective-Cで同等のものを見つけることができませんでした.

view.transform= CGAffineTransform(scaleX: 1.5, y: 1.5)
view.transform = view.transform.rotated(by angle: CGFloat(45 * M_PI / 180))

ご提案いただきありがとうございます。

4

1 に答える 1

1

関数を既存の変換に使用CGAffineTransformRotateして、回転を適用できます。CGAffineTransformTranslateと を使用しCGAffineTransformScaleて、移動とスケーリングを適用することもできます。操作の順序が重要であることに注意してください。

たとえば、既存の変換がある場合は、次のmyTransformように回転できます。

myTransform = CGAffineTransformRotate(myTransform, M_PI / 2);

この操作は入力変数には影響しません。代わりに、新しい変換が返されるため、必ず関数の戻り値を使用してください。それが私がラインを始めた理由myTransform = ...です。

詳細については、https://developer.apple.com/documentation/coregraphics/cgaffinetransform-rb5?language=objcを参照してください。

于 2018-09-18T18:10:24.083 に答える