1

我有一个复杂的问题。我正在为 iOS 制作一个旋风游戏。您可以用手指拖动滚轮的箭头。现在我不想让它在用户滑动时旋转。

假设我慢速旋转箭头,然后它应该慢慢移动,最后它应该停止,或者当用户尽可能快地滑动时,箭头应该尽可能快地旋转。

目前我有这段代码可以使箭头可拖动。

我该怎么做这个动画?

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];
    gestureStartPoint = [touch locationInView:self.view];

    CGPoint startPoint = CGPointMake(arrowImage.center.x, arrowImage.center.y);

    CGPoint endPoint = CGPointMake(gestureStartPoint.x, gestureStartPoint.y);

    angleStartVal = ((((atan2((endPoint.y - startPoint.y) , (endPoint.x - startPoint.x)))*180)/M_PI)+90);

    timerStart = CFAbsoluteTimeGetCurrent();

}

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{

    UITouch *touch = [touches anyObject];
    CGPoint currentPosition = [touch locationInView:self.view];

    CGPoint startPoint = CGPointMake(arrowImage.center.x, arrowImage.center.y);
    CGPoint endPoint = CGPointMake(currentPosition.x, currentPosition.y);

    angleVal = ((((atan2((endPoint.y - startPoint.y) , (endPoint.x - startPoint.x)))*180)/M_PI)+90);
    arrowImage.transform = CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(angleVal));

     //NSLog(@"angle: %f",angleVal);

}

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {

}
4

2 回答 2

4

如果您希望它减速直到停止,那么我将通过一个不可见的滚动视图来控制它来实现这一点。

UIScrollView滑动时已经减速,您可以控制减速速度。

VC 应该是UIScrollViewDelegate并使其成为“无限滚动视图”。即,当它滚动到一端时,代表将其放回另一端。

现在,您可以在 x 方向上应用 contentOffset 量 ti 旋转角度。

0% 偏移 = 0 旋转 100% 偏移 = 360 旋转

现在您根本没有尝试为旋转设置动画,您只是获取 scrollView 的偏移量并将其作为旋转应用于针头。

TBH,您甚至不需要它是隐形的,只需在其上放置任何东西并将滚动视图放在您的针上。

IE

[--------SCROLL VIEW---------]  //scroll this
[--------NEEDLE VIEW---------]  //Use the scroll amount from the scroll view to apply rotation here.
[-COLORS and BODY PARTS VIEW-]  //Doesn't move
[-----VC  View---------------]  //Doesn't move

Apple 在几个 UI 中使用了与此类似的技术。

编辑

我自己创建了这个来测试我的方法是否有效。

你可以看到 UIViewController 的完整代码来运行这个......

循环 UIScrollView 但继续减速

UIImageView是一个带有向上箭头的方形视图。UIScrollView具有与 完全相同的框架,并UIImageView位于其顶部。

于 2013-01-31T14:51:00.153 回答
1

为了使箭头图像视图同时移动和转动,我会将箭头图像视图嵌入到视图中,并像您一样使用 CGAffineTransformMakeRotation。然后移动箭头嵌入的视图并同时旋转箭头的图像视图。

然后为了让它在一个人滑动时旋转和/或移动得更快,我会用 velocityInView 查看 UIPanGestureRecognizer:看看他们移动手指的速度并相应地调整动画。

 _panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanFrom:)];
[self.someView addGestureRecognizer:_panGestureRecognizer];

-(void)handlePanFrom:(UIPanGestureRecognizer *)recognizer{
CGPoint translation = [recognizer translationInView:recognizer.view];
CGPoint velocity    = [recognizer velocityInView:recognizer.view];



if (recognizer.state == UIGestureRecognizerStateBegan) {
}
else if (recognizer.state == UIGestureRecognizerStateChanged) {
    CGPoint tempPoint;
    tempPoint = [recognizer locationInView:self.view];
    NSLog(@"point %f", tempPoint.y);
    NSLog(@"center %f", self.someview.center.y);

}
else if (recognizer.state == UIGestureRecognizerStateEnded) {
    CGPoint tempPoint;
    tempPoint = [recognizer locationInView:self.view];


}

}

于 2013-01-29T13:36:02.323 回答