来自仿射变换旋转的奇怪行为在iOS上

时间:2012-11-29 21:27:49

标签: ios uiimageview cgaffinetransform

我想对UIImageView进行相当简单的旋转。基本上我有一个完美方形图像的轮子图像,我想在动画下旋转它。

所以我尝试了这个:

- (void)testButtonPressed:(id)sender {
    NSLog(@"Test button pressed");
    CGAffineTransform transform = CGAffineTransformMakeRotation(1.0);

    [UIView animateWithDuration:10.0 delay:0 options:UIViewAnimationOptionCurveLinear
                     animations:^{
                         dial.transform = transform;  // "dial" is a UIImageView
                     }
                     completion: ^(BOOL finished){
                     }];
 }

当动画开始时,图像(大约300平方)立即跳起50-100像素并被“挤压”成一个狭窄的椭圆形。之后,动画进行得很好。

我尝试使用beginAnimation代替行为。

我明白我不理解关于旋转原点的东西(文档在圆圈中说话),但挤压似乎很奇怪,而且这一切都是一次性发生(与动画相比)的事实很奇怪。

有什么想法吗?

(这是在Xcode 4.5.1的iPhone 6.0模拟器上运行。可能只是一个模拟器吗?)

更新:我有机会更多地工作(我在“真正的”工作之间做)。我创建了一个从未进行过自动布局的新XIB,并且轮子是“正常”但背景是垂直压缩的。

然后有点灵感。我注意到图像视图在NLog转储中标记为“autoresize”。没有看到从IB中关闭它的方法,但确实看到您可以关闭主视图上的“自动调整子视图”。这样做,它表现得很完美!

我认为为autolayout引入的一些新功能是罪魁祸首。但是,不知道,如果我找到了所有神奇的设置。

但是...... 即使在关闭所有内容的“不透明”之后,iPad上的“透明”部分仍然存在黑色问题。

更新:我终于发现我的图像处于JPG 24位模式而不是32位模式。这适用于模拟器 - 纯黑色被解释为透明。但它不适用于iPad。使用32位图像修复了这些(并且“关闭了自动调整子视图以消除奇怪的扭曲/翻译)一切都很好 除了 ...旋转> 180度向后动画动画是“聪明的”并采取“最短路径”。

我想我只需要将动画分成两个步骤。

1 个答案:

答案 0 :(得分:0)

为什么不使用CABasicAnimation进行此操作。

CABasicAnimation* rotationAnimation;
rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
rotationAnimation.toValue = [NSNumber numberWithFloat: -M_PI_2 ];
rotationAnimation.duration = 2.0;
rotationAnimation.cumulative = YES;
rotationAnimation.repeatCount = 1.0; 
rotationAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];

[imageView.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"];