如何设置可拖动对象边界的目标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
答
请参阅行,你在-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。
当您跟踪拖动时,请勿将黑色按钮移动到三角形之外。 (如果你有更具体的问题,我可以给你一个更具体的答案。) – Caleb 2013-03-25 19:41:33
@Caleb我该怎么问?英语不是我的第一语言......我发现它很难解释......对不起......但我的意思是:照片上的黑色按钮不能出现在三角形中......所以按钮必须留在那个你知道的某个“地区”? – matthijs 2013-03-25 19:43:13
你应该告诉我们你是如何管理拖动按钮的。你是否在跟踪自己?使用手势识别器?做别的事吗?也许显示拖动跟踪的代码。无论如何,你显然有一些代码在移动按钮,对吧?基本上,您需要修改该代码,以便它不会将按钮移动到您决定的任何边界之外。就目前而言,我们无法讨论该代码,因为只有我们其中一个人可以看到它。 – Caleb 2013-03-25 19:54:43