ios - 旋转 UIView(再次)

标签 ios objective-c uiview cgaffinetransform atan2

我在再次旋转 uiview 时遇到了一些问题。这一次,我试图以正常速度旋转的另一个 uiview 的 1/12 速度旋转 uiview。但是,当我尝试完成此任务时,我尝试移动较慢的 uiview 如下所示:

第一次更新 https://www.youtube.com/watch?v=wj3nRJo5CMM&feature=youtu.be

第二次更新 https://www.youtube.com/watch?v=YLRkUzXSDtQ&feature=youtu.be

这是我的代码:

- (void)rotateHand:(UIPanGestureRecognizer *)panGesture {
    if ([(UIPanGestureRecognizer*)panGesture state] == UIGestureRecognizerStateBegan) {
        CGPoint touchPoint = [panGesture locationInView:[self view]];
        float dx = touchPoint.x - minHandContainer.center.x;
        float dy = touchPoint.y - minHandContainer.center.y;
        arcTanMin = atan2(dy,dx);
        arcTanHour = atan2(hourHand.center.x - minHandContainer.center.x, hourHand.center.y - minHandContainer.center.y);
        if (arcTanMin < 0) {
            arcTanMin = 2 * M_PI + arcTanMin;
        }
        if (arcTanHour < 0) {
            arcTanHour = 2 * M_PI + arcTanMin;
        }
        NSLog(@"arcTanMin %f", arcTanMin);
        startTransformMin = minHandContainer.transform;
        startTransformHour = hourHandContainer.transform;
    }
    if ([(UIPanGestureRecognizer*)panGesture state] == UIGestureRecognizerStateChanged) {
        CGPoint pt = [panGesture locationInView:[self view]];
        float dx = pt.x  - minHandContainer.center.x;
        float dy = pt.y  - minHandContainer.center.y;
        float ang = atan2(dy,dx);
        if (ang < 0) {
            ang = 2 * M_PI + ang;
        }
        float angleDifferenceM = arcTanMin - ang;
        float angleDifferenceH = arcTanHour + angleDifferenceM * (1.0/12.0);
        NSLog(@"angleDiffM %f", angleDifferenceM);
        NSLog(@"angleDiffH %f", angleDifferenceH);
        minHandContainer.transform = CGAffineTransformRotate(startTransformMin, -angleDifferenceM);
        hourHandContainer.transform = CGAffineTransformRotate(startTransformHour, -angleDifferenceH);
    }
}

最佳答案

看来您正在使用 arcTanMin 作为分针和时针的起始引用角度。因此,当您在 x 轴上跳跃时,angleDifferenceMangleDifferenceH 都在跳跃(这就是为什么在跳跃时时针的角度到 y 轴的角度与分针到 x 轴的角度相同),但是 angleDifferenceH 不需要进行跳跃。改变这个:

float angleDifferenceH = angleDifferenceM * (1.0/12.0); 

float angleDifferenceH = arcTanHour + angleDifferenceM * (1.0/12.0);

arcTanHour 设置适当的起始值。

关于ios - 旋转 UIView(再次),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25335040/

相关文章:

objective-c - 定时触发

iphone - 应用程序试图在目标 <UINavigationController : 0x2007af00> 上呈现一个无模态视图 Controller

objective-c - 简单的 UIView 动画移动不起作用

ios - 以编程方式在 iphone 处于锁定模式时打开相机应用程序

ios - 尝试减少 for 循环 Swift 中的内存影响 (4)

ios - 如何关闭 MFMailComposeViewController?

ios - 如何展开UIView或在键盘上方显示UIView

ios - 一旦我开始滚动,带有自定义 xib 单元格的 UITableView 就会消失

ios - 通过 iOS 6 工具栏上的按钮关闭 map

ios - 为什么 UIView 截图后 PNG 图像尺寸会变大?