4

これは面白そうに聞こえるかもしれませんが、UIViewといくつかのトリガーを使用して、リアルな回転でノブを再作成するのに何時間も費やしました。目標を達成しましたが、ノブが左右に回転しているかどうかがわかりません。数学の最も適切な部分はここにあります:

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{{
    UITouch * touch = [touches anyObject];
    CGPoint pt = [touch locationInView:self];

    float dx = pt.x-iv.center.x;
    float dy = pt.y-iv.center.y;
    float ang = atan2(dy、dx);

    //回転を行います
    if(deltaAngle == 0.0){
        deltaAngle = ang;
        initialTransform = iv.transform;
    }そうしないと
    {{
        float angleDif = deltaAngle-ang;
        CGAffineTransform newTrans = CGAffineTransformRotate(initialTransform、-angleDif);
        iv.transform = newTrans;
        currentValue = [self goodDegrees:radiansToDegrees(angleDif)];
    }
}

理想的には、数値を利用して、回転が正か負かを教えてくれます。

4

2 に答える 2

2

ノブの中心点がノブに使用している画像の中心である場合、タッチが中心の左/右から始まり、上下に移動するかどうかを検出できるはずです。タッチが左側から始まり、下に移動している場合は、左に回転しています。中央の反対側から始まるタッチの場合はその逆です。touchesDidMoveメソッドで連続するx座標を配列に配置し、簡単な比較を行うことで、タッチが上向きまたは下向きに移動しているかどうかを検出できます。

于 2010-03-20T21:09:33.650 に答える
0

ありがとうリムーバー。これは私が必要としていたものに近いですが、最終的には、ノブ オブジェクトがコントローラー クラスにイベントを渡すため、回転から値を測定する方法が必要でした...つまり、340* は CClockWise で 94% です。とにかく、上記の方法を使用してこれを解決し、 currentValue をデリゲートに渡しました。次に、デリゲートはそのメソッドを取得し、独自のプライベート フロートを使用して、値が最後に受け取った値よりも高いか低いかを比較します。

//デリゲートはプライベート値を使用して最後のコールバックから測定します #pragma mark UIKnobViewDelegate - (void)dialValue:(float)value { if (lastValue == 0.00) { lastValue = lastValue; } if (値

そこから、コントローラーは好きなことを何でもできます

于 2010-03-21T12:32:56.097 に答える