使用 cgaffinetransformmakescale 和 cgaffinetransformmakerotation 使我的视图变形

Using cgaffinetransformmakescale and cgaffinetransformmakerotation deforms my view

我有一个简单的 UIView:

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
view.backgroundColor = [UIColor greenColor];
[self.view addSubview:view];
self.someView = view;

那我就这样做

[UIView animateWithDuration:10
                      delay:1
                    options:UIViewAnimationOptionCurveEaseInOut
                 animations:^{
    self.someView.center = CGPointMake(CGRectGetWidth(self.view.bounds) - CGRectGetWidth(self.someView.frame) / 2, 150);

                     CGAffineTransform transform = CGAffineTransformMakeRotation(M_PI);
                     self.someView.transform = CGAffineTransformScale(transform, 2, 0.5);

}
                 completion:^(BOOL finished) {

                 }];

在执行这个简单的动画时,someView变形了。据我所知,它应该旋转并改变它的大小。我不明白为什么会这样,我该如何解决?

谢谢

问题是动画组合缩放和旋转。最终结果与分别为它们设置动画效果相同,但中间的帧不容易定义。所以动画框架进行了猜测,并不是你所期待的

如果您希望动画分别显示旋转和缩放,则需要将它们分别应用到视图层次结构中。例如:

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
view.backgroundColor = [UIColor greenColor];
[self.view addSubview:view];
self.someView = view;

UIView *innerView = [[UIView alloc] initWithFrame:view.bounds];
innerView.backgroundColor = [UIColor blueColor];
[view addSubview:innerView];
self.someInnerView = innerView;

动画分割变换:

[UIView animateWithDuration:10
                      delay:1
                    options:UIViewAnimationOptionCurveEaseInOut
                 animations:^{
                     self.someView.center = CGPointMake(CGRectGetWidth(self.view.bounds) - CGRectGetWidth(self.someView.frame) / 2, 150);

                     self.someView.transform = CGAffineTransformMakeRotation(M_PI);
                     self.someInnerView.transform = CGAffineTransformMakeScale(2, 0.5);

                 }
                 completion:^(BOOL finished) {

                 }];