2011-07-03 5 views
1

UIImageViewをドラッグすることはできますが、画面の特定の領域内でのみ可能ですか?私のコードは現在次のようになっています:UIImageViewを制限された範囲にドラッグ

- (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{ 
    UITouch *touch = [[event allTouches] anyObject]; 
    touch.view.frame = CGRectMake(104, 171, 113, 49); 

    if([touch view] == toggle) 
    { 

     CGPoint location = [touch locationInView:self.view]; 
     CGPoint newLocation = CGPointMake(toggle.center.x, location.y); 

     toggle.center = newLocation; 
     NSLog(@"%f \n",toggle.center.y); 

    } 
} 

私が定義したフレーム内でのみ画像をドラッグしたいと思っています。

答えて

1

あなたはUIViewsを使用し、1つのビューが完全に第二の枠内に収まるかどうかを確認したい場合は最初の矩形が完全に

bool CGRectContainsRect (
    CGRect rect1, 
    CGRect rect2 
); 

の内側にあるかどうかを確認するためにCGRectContainsRect(rect1, rect2)を使用することができ、関連する関数CGRectContainsRectがチェックを行います。これは交差点をチェックしません。両方の矩形の和集合が真を返すためには、最初の矩形と等しくなければなりません。この関数は2つの引数をとります。最初の矩形は常に周囲の項目です。第2引数は、最初の引数の中に完全に入るか、それともそうではありません。

だからあなたのコードは、この

CGPoint location = [touch locationInView:self.view]; 
CGPoint newLocation = CGPointMake(toggle.center.x, location.y); 

CGRect r = CGRectMake(newLocation.x-self.frame.size.width/2, 
         newLocation.y-self.frame.size.height/2, 
         self.frame.size.width, 
         self.frame.size.height); 
if(CGRectContainsRect(r, theOtherRect)){ 
    toggle.center = newLocation; 
    NSLog(@"%f \n",toggle.center.y); 
} 

その他の便利なCoreGraphics機能のようなものが考えられます。http://blogs.oreilly.com/iphone/2008/12/useful-core-graphics-functions.html

もう一つのヒント:NSLog(@"%@", NSStringFromCGPoint(toggle.center))はCGTypesのログをより容易にします。同等に使用してください:NSStringFromCGRect(rect)

0
if (newLocation.y > NSMaxY(touch.view.frame)) newLocation.y = NSMaxY(touch.view.frame); 
if (newLocation.y < NSMinY(touch.view.frame)) newLocation.y = NSMinY(touch.view.frame); 
toggle.center = newLocation; 

好きなようにx座標も同じことができます。

+0

私は少し初心者です。それを私のコードに入れて私に見せてもらえますか?私はかなり理解していない。 – Omar

+0

私が書いたように、 'toggle.center = newLocation;'の直前になります。 – jtbandes

+0

フレームを使用しないで別の方法がありますか? – Omar

関連する問題