我想对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度向后动画动画是“聪明的”并采取“最短路径”。
我想我只需要将动画分成两个步骤。
答案 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"];