CABasicAnimation
iOSアプリを作成していますが、半透明のマテリアルエフェクトのように、回転する(by)画像を下のサーフェスに反映する方法が必要です。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の組み合わせを試しましたが、反射ビューを正しい反射経路に従わせることはできません。私は三角法の人ではありませんが、これは数学を知っている人にとっては非常に些細なことであるはずです。それに加えて、可能なすべての組み合わせを試しました。いずれにせよ、そのうちの1つが正解です。回転計算コードに問題がありますか、それともアニメーション/変換メソッドに関係がありますか?
ありがとう、
できる。