【问题标题】:IOS/Objective-C:Animation of Multiple CGAffineTransformationsIOS/Objective-C:多个CGAffineTransformation的动画
【发布时间】:2018-09-18 18:06:24
【问题描述】:

我正在尝试执行一个同时执行三件事的动画:平移、旋转和更改图像的大小。

我可以同时做两个,翻译和调整大小。但是,当我在以下代码末尾添加旋转时,它会被忽略。如果我将它放在代码的开头,则忽略大小变化。我读到您可以使用 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
 ];

}

谁能推荐让所有三件事同时发生的方法。

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

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

提前感谢您的任何建议。

【问题讨论】:

    标签: ios objective-c cgaffinetransformscale


    【解决方案1】:

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

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

    myTransform = CGAffineTransformRotate(myTransform, M_PI / 2);

    操作不会影响输入变量,相反,它会返回一个新的变换,因此请确保使用函数的返回值。这就是我以myTransform = ... 开头的原因。

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

    【讨论】:

    • 如何获得现有的转换。你能推荐 Obj-c 中的代码吗?
    • @user6631314 当然,我已经更新了我的答案。希望对您有所帮助。
    • 这样就完成了!谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多