(iOS)拖放,对齐网格,检查适当区域

Pal*_*ome 0 drag-and-drop objective-c uigesturerecognizer ios

我已经阅读了有关拖放的所有内容,gestureRecognizer但尚未找到解决方案。我得到了10x10的 “游戏场” ,我想实现将之拖放到网格上并检查元素是否放置在“游戏场”上。

我将我的8个“ TempButtons”添加到了UIViewbuttonSuperView中action:@selector(imageMoved:withEvent:)

- (IBAction) imageMoved:(id) sender withEvent:(UIEvent *) event
{
    UIControl *control = sender;
    originalPosition = [self getButton:sender];

    UITouch *touch = [[event allTouches] anyObject];

    point = [touch locationInView:control];

    float step = 31.0; // Grid step size.
    CGPoint center = control.center;
    center.x += step * floor((point.x / step));
    center.y += step * floor((point.y / step));

    control.center = center;
}
Run Code Online (Sandbox Code Playgroud)

它起作用了,我可以移动网格步长为31px的任何按钮。我可以将其放置在任何地方,但必须将其放在UIViewfieldView上。如果将它放在正确的位置,就可以了,我可以将其替换在另一个图块上。但是,如果我将其放置在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) {}];
}
Run Code Online (Sandbox Code Playgroud)

如果将这段代码放在- (IBAction) imageMoved:(id) sender withEvent:(UIEvent *)事件方法上,它将使按钮一直移动到其“原始位置”。但是我需要检查它是否仅正确放置在“ touchesEnded”上。但这是另一种方法,如果放置不当,我不明白如何实现按下哪个按钮及其原始坐标。

也许有一种更好的方法来使用“ UIView”而不是“ UIButton”,但我仍然不知道该怎么做。

提前致谢。亲切的问候,

缺口

Pal*_*ome 5

由于没有人回答我的问题,所以我花了一些时间找到可行的解决方案。

- (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) {}];
    }
}
Run Code Online (Sandbox Code Playgroud)

现在它就像魅力一样工作,我可以继续前进。我的按钮可以自由移动到网格上,当在游戏场外弯曲时,它们将移回其原始位置。

问候,尼克