我不是要求给出一些代号,只是在正确的方向上轻推一下会非常感激。我的搜索没有任何好处。
我有一个UIButton,我可以在屏幕上自由移动。
我想限制此对象上的拖动区域,以便它只能上下移动或左右移动。我相信我需要获得边界的x,y坐标,然后限制在该区域之外的移动。但这是我所拥有的。我的知识不会比这更进一步。
过去有没有人实现类似的东西?
亚当
答案 0 :(得分: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;
}
如果你想要一个只在一个轴上滑动的按钮,这很容易:
- (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
}
}
答案 1 :(得分:1)
大概你正在使用touchesBegan:
,touchesMoved:
等,所以它应该像测试触点是否在touchesMoved:
中的视图范围之外一样简单。如果它在外面,请忽略它,但如果它在里面,请调整按钮的位置。
我怀疑你可能会觉得这个功能很有用:
bool CGRectContainsPoint ( CGRect rect, CGPoint point );