(iOS)拖放、捕捉到网格、检查适当区域
我已经阅读了所有关于拖放和手势识别器的内容,但还没有找到解决方案。 我得到了“gamefield”10x10,我想通过抓取网格实现拖放,并检查元素是否放置在“gamefield”上 我用(iOS)拖放、捕捉到网格、检查适当区域,ios,objective-c,drag-and-drop,uigesturerecognizer,Ios,Objective C,Drag And Drop,Uigesturerecognizer,我已经阅读了所有关于拖放和手势识别器的内容,但还没有找到解决方案。 我得到了“gamefield”10x10,我想通过抓取网格实现拖放,并检查元素是否放置在“gamefield”上 我用操作:@selector(imageMoved:withEvent:)将我的8个“临时按钮”添加到UIView按钮superview 它工作,我可以移动任何按钮与网格步骤31px。我可以把它放在任何地方,但我必须把它放在UIViewfieldView上。如果它放在那里就可以了,我可以把它换到另一块瓷砖上。但是如果
操作:@selector(imageMoved:withEvent:)
将我的8个“临时按钮”添加到UIView
按钮superview
它工作,我可以移动任何按钮与网格步骤31px。我可以把它放在任何地方,但我必须把它放在UIView
fieldView上。如果它放在那里就可以了,我可以把它换到另一块瓷砖上。但是如果我把它放在fieldView之外,按钮应该回到原来的位置。大概是这样的:
if ([self.fieldView pointInside:point withEvent:nil])
{
control.center = center;
} else {
[UIView animateWithDuration:0.4
delay:0.0
options:UIViewAnimationOptionCurveEaseInOut
animations:^ {
control.center = originalPosition;
// to
}
completion:^(BOOL finished) {}];
}
如果将此代码放在-(iAction)imageMoved:(id)sender with event:(UIEvent*)
事件方法上,则在按钮移动时,它会使按钮返回其“原始位置”。但我需要检查它是否只正确放置在“touchesend”上。但这是另一种方法,我不知道如何知道按下了哪个按钮,以及如果放置不当,要返回的原始坐标
也许有更好的方法使用“UIView”而不是“UIButton”,但我仍然不知道如何做到这一点
提前谢谢。
亲切问候,
尼克由于没有人回答我的问题,我花了一些时间找到了可行的解决办法
- (IBAction) imageMoved:(id) sender withEvent:(UIEvent *) event
{
dragObject = sender;
originalPosition = [self getButton:sender];
UITouch *touch = [[event allTouches] anyObject];
point = [touch locationInView:dragObject];
float step = 31.0; // Grid step size.
CGPoint center = dragObject.center;
center.x += step * floor((point.x / step));
center.y += step * floor((point.y / step));
dragObject.center = center;
[sender addTarget:self action:@selector(touchesEnded:withEvent:) forControlEvents:UIControlEventTouchUpInside];
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
if (![fieldView pointInside:dragObject.center withEvent:nil])
{
[UIView animateWithDuration:0.4
delay:0.0
options:UIViewAnimationOptionCurveEaseInOut
animations:^ {
dragObject.center = CGPointMake(originalPosition.x + 15.5, originalPosition.y + 15.5);
}
completion:^(BOOL finished) {}];
}
}
现在它像魅力一样工作,我可以继续前进。我的按钮可以自由移动,当在游戏场地外打褶时,它们会回到原来的位置
问候,,
尼克
- (IBAction) imageMoved:(id) sender withEvent:(UIEvent *) event
{
dragObject = sender;
originalPosition = [self getButton:sender];
UITouch *touch = [[event allTouches] anyObject];
point = [touch locationInView:dragObject];
float step = 31.0; // Grid step size.
CGPoint center = dragObject.center;
center.x += step * floor((point.x / step));
center.y += step * floor((point.y / step));
dragObject.center = center;
[sender addTarget:self action:@selector(touchesEnded:withEvent:) forControlEvents:UIControlEventTouchUpInside];
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
if (![fieldView pointInside:dragObject.center withEvent:nil])
{
[UIView animateWithDuration:0.4
delay:0.0
options:UIViewAnimationOptionCurveEaseInOut
animations:^ {
dragObject.center = CGPointMake(originalPosition.x + 15.5, originalPosition.y + 15.5);
}
completion:^(BOOL finished) {}];
}
}