2

ノブ付きのコントロールを作成しました。このノブは、x軸とy軸に沿ってのみ移動可能である必要があります。
私はすでに次のメソッドを実装しています。

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

1つの軸に沿った動きを制限することはで実装する必要があることを私は知っていtouchMovedます。たとえばx軸に沿った動きを制限すると、すべてが期待どおりに機能します。しかし、y軸の移動も有効にするにはどうすればよいですか?2番目の軸を有効にすると、ノブの動きは この2つの軸だけに制限されません。ここにtouchMoved実装の一部があります:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [[event allTouches] anyObject];
    CGPoint currentLocation = [touch locationInView:self.view];
    CGPoint centerPoint = _triggerCap.center;
    CGPoint selectionTriggerCenter = _selectionTrigger.center;


    double distance = ({double d1 = centerPoint.x - selectionTriggerCenter.x, d2 = centerPoint.y - selectionTriggerCenter.y; sqrt(d1 * d1 + d2 * d2); });
    if (distance < 100.0) {
        if (fabsf(selectionTriggerCenter.y - currentLocation.y) > 5) {
            centerPoint.y = currentLocation.y;
            _triggerCap.center = centerPoint;

誰かが私にこれらの2つのだけに沿った動きを可能にする方法のヒントを教えてもらえますか?

4

1 に答える 1

0

これを行うために私が考えることができる最も簡単な方法は、私の頭の上から:

touchesBegan、ノブの内側に最初に触れた位置を記録します。次に、 でtouchesMoved、最初のタッチから少なくともある程度の最小距離 (おそらく 15 ピクセル - いろいろ試して、何が最適かを確認してください) のタッチが発生するまで待ちます。最初のタッチから x 方向または y 方向に離れているかどうかを確認します。これにより、現在のタッチ シーケンスの残りの部分でどの軸の動きを制限するかが決まります。軸を示すフラグを設定し、それ以降は、単一の軸に限定された移動用に既に持っているコードを使用します。touchesEndedまたはノブが軸の交点から特定の距離内に戻ったときに、フラグをリセットします。

于 2012-07-14T23:21:14.547 に答える