UIView 自体を回転させずに、中心点を中心に UIView を回転させたいと思います。時計の針とは対照的に、観覧車の車のようなものです (常に直立しています)。
中心点を中心にUIViewを回転させたときは、レイヤーの位置/アンカーポイント/変換を使用して効果を達成しました。しかし、それは明らかにビュー自体の向きを変えます。
何か助けはありますか?
ケラー
UIView 自体を回転させずに、中心点を中心に UIView を回転させたいと思います。時計の針とは対照的に、観覧車の車のようなものです (常に直立しています)。
中心点を中心にUIViewを回転させたときは、レイヤーの位置/アンカーポイント/変換を使用して効果を達成しました。しかし、それは明らかにビュー自体の向きを変えます。
何か助けはありますか?
ケラー
これは Core Animation で行うのは非常に簡単です。この例ではかなりつまらない静的な値を使用しているので、変更を加える必要があることは明らかです。しかし、これは円形の UIBezierPath に沿ってビューを移動する方法を示しています。
UIView *view = [UIView new];
[view setBackgroundColor:[UIColor redColor]];
[view setBounds:CGRectMake(0.0f, 0.0f, 50.0f, 50.0f)];
[view setCenter:[self pointAroundCircumferenceFromCenter:self.view.center withRadius:140.0f andAngle:0.0f]];
[self.view addSubview:view];
UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(CGRectGetMidX(self.view.frame) - 140.0f, CGRectGetMidY(self.view.frame) - 140.0f, 280.0f, 280.0f)];
CAKeyframeAnimation *pathAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
pathAnimation.duration = 5.0;
pathAnimation.path = [path CGPath];
[view.layer addAnimation:pathAnimation forKey:@"curveAnimation"];
そして、ビューの初期中心を生成する基本関数。
- (CGPoint)pointAroundCircumferenceFromCenter:(CGPoint)center withRadius:(CGFloat)radius andAngle:(CGFloat)theta
{
CGPoint point = CGPointZero;
point.x = center.x + radius * cosf(theta);
point.y = center.y + radius * sinf(theta);
return point;
}
ビューの中心を円の周りに何度も再配置する必要があります。現在の中心点を計算するメソッドを実装し、UIView animateWithDuration... メソッドからそのメソッドを呼び出し続けます。