如何设置可拖动对象边界的目标C

问题描述:

我有一个问题,如何设置可拖动对象边界的目标C

我想的黑色按钮不迁出三角形的,(见Flickr的链接) ,如果越过的边缘三角形,该按钮返回到三角形。

我该怎么做?

链接:http://www.flickr.com/photos/[email protected]/8590549046/in/photostream

#import "DraggableViewController.h" 

@interface DraggableViewController() 

@end 

@implementation DraggableViewController 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    // create a new button 
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [button setBackgroundImage:[UIImage imageNamed:@"Scale9Image.png"] 
         forState:UIControlStateNormal]; 

    // add drag listener 
    [button addTarget:self action:@selector(wasDragged:withEvent:) 
    forControlEvents:UIControlEventTouchDragInside]; 

    // center and size 
    button.frame = CGRectMake((self.view.bounds.size.width - 100)/1.6, 
           (self.view.bounds.size.height - 50)/1.9, 
           40, 40); 
    button.frame.origin.y; 

    [self.view addSubview:button]; 

} 

- (void)wasDragged:(UIButton *)button withEvent:(UIEvent *)event 
{ 
    // get the touch 
    UITouch *touch = [[event touchesForView:button] anyObject]; 

    // get delta 
    CGPoint previousLocation = [touch previousLocationInView:button]; 
    CGPoint location = [touch locationInView:button]; 
    CGFloat delta_x = location.x - previousLocation.x; 
    CGFloat delta_y = location.y - previousLocation.y; 

    // move button 
    button.center = CGPointMake(button.center.x + delta_x, 
           button.center.y + delta_y); 
} 
@end 
+0

当您跟踪拖动时,请勿将黑色按钮移动到三角形之外。 (如果你有更具体的问题,我可以给你一个更具体的答案。) – Caleb 2013-03-25 19:41:33

+0

@Caleb我该怎么问?英语不是我的第一语言......我发现它很难解释......对不起......但我的意思是:照片上的黑色按钮不能出现在三角形中......所以按钮必须留在那个你知道的某个“地区”? – matthijs 2013-03-25 19:43:13

+0

你应该告诉我们你是如何管理拖动按钮的。你是否在跟踪自己?使用手势识别器?做别的事吗?也许显示拖动跟踪的代码。无论如何,你显然有一些代码在移动按钮,对吧?基本上,您需要修改该代码,以便它不会将按钮移动到您决定的任何边界之外。就目前而言,我们无法讨论该代码,因为只有我们其中一个人可以看到它。 – Caleb 2013-03-25 19:54:43

请参阅行,你在-wasDragged移动的按钮?

button.center = CGPointMake(button.center.x + delta_x, 
          button.center.y + delta_y); 

可以通过测试新点来防止按钮离开三角形,以确保它在三角形内部,然后再移动按钮。好,你可以简单地计算出这是最接近新点和使用,使按键也将移动的三角形之外的移动触摸屏的三角形内的点,但它会被约束到三角:

CGPoint newPoint = CGPointMake(button.center.x + delta_x, 
           button.center.y + delta_y); 
button.center = [self buttonPositionNearestToPoint:newPoint]; 

当然,您需要实施-buttonPositionNearestToPoint:方法。你需要一个小小的计算几何来做到这一点。请点击Point in triangle test进行温柔的介绍。 barycentric coordinate clamping on 3d triangle也可能证明有用,即使它是3D而不是2D。

+0

谢谢你,你给了我第一个可以理解的答案呢...最好的问候 - Matthijs – matthijs 2013-03-25 20:31:19

+0

我该如何实现buttontonearestpoint方法? @Caleb – matthijs 2013-03-26 11:00:02