CATransform3DRotate效果在应用锚点后消失

编辑正确的观察。

我使用以下两个片段来旋转UIImageView。 stage1后,我得到了所需的3D效果:视图旋转(3D效果)和拉伸(更大的尺寸)。 在舞台2上,我试图用右侧的铰链摆动右侧的视图。

如果我应用更改定位点的线,视图会正确摆动(右转),但是一个主要问题是:视图的大小恢复到原始大小(较小),而(旋转)3D效果仍然完好无损,然后摆动发生。

有什么build议么?

rightView.layer.anchorPoint = CGPointMake(1.0, 0.5); -(void)stage1 { [UIView animateWithDuration:1.5 animations:^{ rightView.transform = CGAffineTransformMakeTranslation(0,0); //rightView i UIImageView CATransform3D _3Dt = CATransform3DIdentity; _3Dt =CATransform3DMakeRotation(3.141f/42.0f,0.0f,-1.0f,0.0f); _3Dt.m34 = -0.001f; _3Dt.m14 = -0.0015f; rightView.layer.transform = _3Dt; } completion:^(BOOL finished){ if (finished) { NSLog(@"finished.."); } }]; } -(void)Stage2 { rightView.layer.anchorPoint = CGPointMake(1.0, 0.5); //issue? rightView.center = CGPointMake(1012, 384); [UIView animateWithDuration:1.75 animations:^{ CATransform3D rightTransform = rightView.layer.transform; rightTransform.m34 = 1.0f/500; rightTransform = CATransform3DRotate(rightTransform, M_PI_2, 0, 1, 0); rightView.layer.transform = rightTransform; } completion:^(BOOL finished) { }]; } 

你需要添加“选项”你的animation持续时间和添加options:UIViewAnimationOptionBeginFromCurrentState

否则,它从头再次开始。

所以你的舞台2看起来像这样:

 -(void)Stage2 { rightView.layer.anchorPoint = CGPointMake(1.0, 0.5); //issue? rightView.center = CGPointMake(1012, 384); [UIView animateWithDuration:1.75 delay:0.00 options:UIViewAnimationOptionBeginFromCurrentState animations:^{ CATransform3D rightTransform = rightView.layer.transform; rightTransform.m34 = 1.0f/500; rightTransform = CATransform3DRotate(rightTransform, M_PI_2, 0, 1, 0); rightView.layer.transform = rightTransform; } completion:^(BOOL finished) { }]; }