Objective c 使用cgaffinetransformmakescale和cgaffinetransformmakerotation会使我的视图变形

Objective c 使用cgaffinetransformmakescale和cgaffinetransformmakerotation会使我的视图变形,objective-c,cgaffinetransform,Objective C,Cgaffinetransform,我有一个简单的观点: UIView *view = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)]; view.backgroundColor = [UIColor greenColor]; [self.view addSubview:view]; self.someView = view; 然后我做这个 [UIView animateWithDuration:10 dela

我有一个简单的观点:

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) {

                 }];