像核心animation老虎机一样在Z轴上旋转

我是能够移动或animation我的UIView这个代码在这里:

- (void) makeAnim1{ //downward animation [UIView animateWithDuration:1.5 delay:0.15 options: UIViewAnimationCurveLinear animations:^{ carousel.frame = CGRectOffset(carousel.frame, 0, 650); } completion:^(BOOL finished){ //task after an animation ends [self performSelector:@selector(makeAnim1_1) withObject:nil afterDelay:2.0]; NSLog(@"Done!"); }]; } - (void) makeAnim1_1{ //upward animation [UIView animateWithDuration:1.5 delay:0.1 options: UIViewAnimationCurveLinear animations:^{ carousel.frame = CGRectOffset(carousel.frame, 0, -650); } completion:^(BOOL finished){ NSLog(@"Done!"); }]; } 

但是它只是上下移动UIView 。 我怎样才能使它像一个Slot machine旋转,但只包含一个图像或视图。 像在z轴上旋转一样。 但是让它看起来像它包含多个图像。

谢谢您的帮助。

而不是更改animation块内的frame而是更改transform 。 该变换可用于缩放,旋转和平移(移动)视图。 你只能围绕Z轴旋转,但这是你所要求的。 视图上的transform属性需要一个CGAffineTransform ,像这样:

 // rotate pi/2 degrees clockwise carousel.transform = CGAffineTransformMakeRotation(M_PI_2); 

如果您需要进行更高级的转换(例如围绕另一个轴转动),则需要使用一点点核心animation,并设置视图图层(使用CATransform3D而不是CGAffineTransform )的transform属性。

和所有的核心animation代码一样,你需要导入QuartzCore.framework,并在你的代码中包含QuartzCore / QuartzCore.h。

你正在做的上述animation是UIViewanimation只是为了animation视图,但你要求的animation需要更高级的视图层的animation。 我build议你看一下CABasicAnimation的文档,也可以看一下iOS的Core Animation Programming Guide来学习更多。

你可以像这样animation一个视图层的x旋转:

 CABasicAnimation *slotAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.x"]; [slotAnimation setToValue:[NSNumber numberWithFloat:M_PI_2]]; // animation customizations like duration and timing // that you can read about in the documentation [[carousel layer] addAnimation:slotAnimation forKey:@"mySlotAnimation"]; 

上面的代码确实会围绕X轴旋转视图,但是在没有透视的情况下会看起来非常愚蠢(searchSO为“透视核心animation”,之前已经询问过)。 可能有很多调整来获得正确的外观,但这应该足以让你开始。