(iOS)拖放、捕捉到网格、检查适当区域

(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上。如果它放在那里就可以了,我可以把它换到另一块瓷砖上。但是如果

我已经阅读了所有关于拖放和手势识别器的内容,但还没有找到解决方案。 我得到了“gamefield”10x10,我想通过抓取网格实现拖放,并检查元素是否放置在“gamefield”上

我用
操作:@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) {}];
    }
}