2011-08-04 35 views
0

我不是要求givemesamplecodenow响应,只是在正确的方向微调将不胜感激。我的搜索没有任何好处。拖放UIButton但限制到边界

我有一个UIButton,我可以在屏幕上自由移动。

我想限制这个对象的拖动区域,所以它只能上下或左右移动。我相信我需要获得边界的x,y坐标,然后限制在该区域之外的移动。但是,这是我得到的。我的知识并没有比这更进一步。

有没有人在过去实现过类似的东西?

亚当

回答

4

所以我们可以说你在拖拽操作的中间是。通过将其中心设置为引起运动的任何手势的中心,您都可以移动按钮实例。

如果您不喜欢,可以通过测试手势中心和重置中心值来施加限制。下面假定一个按钮连接到所有触摸拖动事件的动作,但如果使用手势识别器或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; 
} 

如果你想要一个按钮,滑动只在一个方向,那是很容易:

- (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);