2011-08-04 10 views
0

私はgivemesamplecodenowレスポンスを求めていません。正しい方向のちょっとした動きは大変ありがたいです。私の検索はうまくいきませんでした。UIButtonをドラッグアンドドロップして境界線に限定します

私はUIButtonを持っていて、画面の周りを自由に動くことができます。

このオブジェクトのドラッグ領域を制限して、上下または左右にしか移動できないようにしたいと考えています。境界のx、y座標を取得し、この領域外の動きを制限する必要があると私は信じています。しかし、それは私が持っている限りです。私の知識はこれ以上伸びない。

誰も過去に同様のものを実装していますか?

アダム

答えて

4

それでは、あなたはドラッグ操作の途中にいるとしましょう。どのようなジェスチャーが動きを引き起こしていても、その中心をその中心に設定することで、ボタンインスタンスを移動しています。

ジェスチャの中心をテストし、中心の値を好きでない場合はリセットして制限を加えることができます。以下では、すべてのTouch Dragイベントのアクションにボタンが接続されていることを前提としていますが、ジェスチャ認識機能やtouchesBegan:や友だちを使用している場合でも原則が適用されます。

- (IBAction)handleDrag:(UIButton *)sender forEvent:(UIEvent *)event 
{ 
    CGPoint point = [[[event allTouches] anyObject] locationInView:self.view]; 

    if (point.y > 200) 
    { 
     point.y = 200; //No dragging this button lower than 200px from the origin! 
    } 

    sender.center = point; 
} 

あなただけの1つの軸上のスライドボタンをしたい場合は、それは十分に簡単です:

- (IBAction)handleDrag:(UIButton *)sender forEvent:(UIEvent *)event 
{ 
    CGPoint point = [[[event allTouches] anyObject] locationInView:self.view]; 
    point.y = sender.center.y; //Always stick to the same y value 

    sender.center = point; 
} 

または多分あなただけの特定のビューの領域内のボタンをドラッグします。境界が複雑な場合は、これを定義する方が簡単かもしれません。

- (IBAction)handleDrag:(UIButton *)sender forEvent:(UIEvent *)event 
{ 
    CGPoint point = [[[event allTouches] anyObject] locationInView:self.someView]; 

    if ([self.someView pointInside:point withEvent:nil]) 
    { 
     sender.center = point; 
     //Only if the gesture center is inside the specified view will the button be moved 
    } 
} 
+0

絶対に華麗で、治療を受けました。 –

1

おそらくあなたはtouchesBegan:touchesMoved:などを使用していると思いますので、タッチポイントがtouchesMoved:であなたの視野の範囲外であるかどうかのテストのように単純にする必要があります。外側にある場合は無視しますが、内側にある場合はボタンの位置を調整します。

私はあなたがこの機能が役立つかもしれ疑い:

bool CGRectContainsPoint (CGRect rect, CGPoint point); 
関連する問題