将车轮旋转到特定点

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将车轮旋转到特定点相关的知识,希望对你有一定的参考价值。

在这个轮子里我们有6件。车轮的顶部是特定点。具体点给出了碎片的信息。现在它提供了蓝色部分的信息。因此,如果我点击其中一个例如紫色,我需要紫色片段去特定点并自动进入有关紫色片段的给定信息。

    CGFloat topPositionAngle = radiansToDegrees(atan2(view.transform.a, view.transform.b));
  1. -180 - 粉红色
  2. -120 - 蓝色
  3. -60 - 橙色
  4. 0 - 紫色
  5. 60 - 黄色
  6. 120 - 绿色

现在topPositionAngle显示-120 =蓝色,当紫色到达特定点时显示0。

    UITouch *touch = [touches anyObject];
    CGPoint currentTouchPoint = [touch locationInView:view];
    CGFloat currentAngle = radiansToDegrees(atan2(currentTouchPoint.x, currentTouchPoint.y));

    CGFloat angleTransform = ???
    CGAffineTransform current = view.transform;
    [UIView animateWithDuration:0.2f animations:^{
        [view setTransform:CGAffineTransformRotate(current, angleTransform)];
    }];

我们如何才能自动旋转到特定点?就像Danske Bank应用程序(请参阅以下youtube链接)类似于0:21 - 0:25分钟的视频。

http://www.youtube.com/watch?v=hulBh_KNGjE

答案
float fromAngle = atan2(m_locationBegan.y-img.center.y, m_locationBegan.x-img.center.x);
float toAngle = atan2(_location.y-imgDigits.center.y, _location.x-img.center.x);
float newAngle = wrapd(m_currentAngle + (toAngle - fromAngle), 0, 2*3.14);
angle = newAngle;

CGAffineTransform transform = CGAffineTransformMakeRotation(newAngle);
img.transform = transform;

使用这样的东西。希望这会有所帮助在这里你应该知道接触点和你的具体观点

另一答案

你需要知道触摸点角度:

CGFloat touchedPointAngle = atan2f(touchPoint.y - centerSuper.y, touchPoint.x - centerSuper.x) + M_PI;

if ((touchedPointAngle < sliceInRadians) && (touchedPointAngle > 0)) {
        angleTransform = sliceInRadians;
} else if ...

然后你可以改造。

以上是关于将车轮旋转到特定点的主要内容,如果未能解决你的问题,请参考以下文章

如何绘制围绕特定点旋转的 NSAttributedString?

车轮转动不正常,如何修理?

如何为 iCarousel 的气缸中的车轮旋转设置计时器

快速的音频播放速度

片段着色器中的OpenGL点精灵旋转

csharp Unity C#片段用于将变换旋转到新的相对旋转数秒