我正在尝试执行一次同时执行三项操作的动画:平移,旋转和更改图像的大小。

我可以一次执行两个操作,即翻译和调整大小。但是,当我在以下代码的末尾添加旋转时,将被忽略。如果将其放在代码的开头,则大小更改将被忽略。我读过,您可以使用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
 ];


}

任何人都可以推荐使所有三件事同时发生的方法。

这是一些使用视图的transform属性的swift代码,但是我无法在Objective-C中找到等效的代码。

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


在此先感谢您的任何建议。

最佳答案

您可以在现有变换上使用CGAffineTransformRotate函数来应用旋转。您还可以使用CGAffineTransformTranslateCGAffineTransformScale进行平移和缩放。请注意,操作顺序很重要。

例如,如果您有一个现有的转换myTransform,则可以像这样旋转它:

myTransform = CGAffineTransformRotate(myTransform, M_PI / 2);

该操作不会影响输入变量,而是会返回一个新的转换,因此请确保使用函数的返回值。这就是为什么我从myTransform = ...开始这一行的原因。

有关更多信息,请访问https://developer.apple.com/documentation/coregraphics/cgaffinetransform-rb5?language=objc

07-26 09:43