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”,但我仍然不知道该怎么做。
提前致谢。亲切的问候,
缺口
由于没有人回答我的问题,所以我花了一些时间找到可行的解决方案。
- (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)
现在它就像魅力一样工作,我可以继续前进。我的按钮可以自由移动到网格上,当在游戏场外弯曲时,它们将移回其原始位置。
问候,尼克
| 归档时间: |
|
| 查看次数: |
1532 次 |
| 最近记录: |