我正在构建一个 iOS 应用程序,我需要一种方法来将旋转 (by CABasicAnimation
) 图像反射到下面的表面,就像半透明的材质效果一样。这是我命名indicator
和indicatorReflection
初始化图像的代码:
#define rotation_reflected(ANG) CGAffineTransformMakeRotation(M_PI/2 - (ANG * M_PI / 180.0))
#define rotation(ANG) CGAffineTransformMakeRotation(-M_PI/2 - (ANG * M_PI / 180.0))
[self rotateIndicator:0];
-(void)rotateIndicator:(float)degrees{
self.indicatorView.transform = rotation(degrees);
self.indicatorReflectionView.transform = rotation_reflected(degrees);
}
之后,我使用以下代码为它们设置动画:
-(void)startWanderingIndicator{
CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"transform"];
CATransform3D xform = CATransform3DMakeAffineTransform(rotation(180));
anim.toValue = [NSValue valueWithCATransform3D:xform];
anim.duration = 4.0f;
anim.fillMode = kCAFillModeForwards;
anim.removedOnCompletion = NO;
[self.indicatorView.layer addAnimation:anim forKey:@"rotation"];
anim = [CABasicAnimation animationWithKeyPath:@"transform"];
xform = CATransform3DMakeAffineTransform(rotation_reflected(180));
anim.toValue = [NSValue valueWithCATransform3D:xform];
anim.duration = 4.0f;
anim.fillMode = kCAFillModeForwards;
anim.removedOnCompletion = NO;
[self.indicatorReflectionView.layer addAnimation:anim forKey:@"rotation"];
}
第一个没有问题。问题始于反射视图。我已经尝试了几乎所有的 +/- PI/2 和 +/- ANGLE 组合,但我永远无法使反射视图遵循正确的反射路径。我不是三角学专家,但这对于任何懂数学的人来说都应该是微不足道的,除此之外,我已经尝试了所有可能的组合,其中一个应该是正确的答案。我的旋转计算代码有问题,还是与动画/变换方法有关?
谢谢,
能。