5

UIView 自体を回転させずに、中心点を中心に UIView を回転させたいと思います。時計の針とは対照的に、観覧車の車のようなものです (常に直立しています)。

中心点を中心にUIViewを回転させたときは、レイヤーの位置/アンカーポイント/変換を使用して効果を達成しました。しかし、それは明らかにビュー自体の向きを変えます。

何か助けはありますか?

ケラー

4

2 に答える 2

9

これは 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;
}
于 2013-08-07T19:43:14.123 に答える
0

ビューの中心を円の周りに何度も再配置する必要があります。現在の中心点を計算するメソッドを実装し、UIView animateWithDuration... メソッドからそのメソッドを呼び出し続けます。

于 2013-08-07T19:29:25.263 に答える