围绕中心点旋转UIView而不旋转视图本身

时间:2013-08-07 19:21:43

标签: ios objective-c uiview quartz-core

我想在不旋转UIView本身的情况下围绕中心点旋转UIView。所以更像是摩天轮的车(总是保持直立),而不是钟表的手。

我绕着中心点旋转UIViews的时候,我已经使用了layer position / anchorPoint / transform来实现这个效果。但这显然会改变视图本身的方向。

任何帮助?

凯勒

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

您应该一遍又一遍地围绕圆圈重新定位视图的中心。实现一个计算当前中心点的方法,并继续从UIView animateWithDuration ...方法调用该方法。