1

uiview を再び回転させると、いくつかの問題が発生します。今回は、通常の速度で回転している別の uiview の速度の 1/12 の速度で uiview を回転させようとしています。ただし、このタスクを達成しようとすると、移動しようとしている uiview が次のようにゆっくりと移動します。

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

2回目の更新 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);
    }
}
4

1 に答える 1