如何编程拖放到Objective-C的IOS区域

我正在寻找Objective-C为IOS平台实现的东西。

我想要两个GUI对象,我们只是说他们是简单的UIImages,是方形的。

然后我有一个“空”GUI元素,只是一个灰色的大小相同的广场。

我希望用户能够将其中一个方形图像拖动到空的方形上,只要图像的某个部分接触到空方形,就会卡入到空方形中并填满。 如果他们把图像放在其他地方,它就会回到原来的位置。

另外,我想要另外2个方​​形图像和另一个空方块,这样有相同的交互作用,但是每组2个图像和1个空方块都不能在彼此之间工作。 即前两个图像只能放入第一个空方块。

我认为会有一些下拉事件,我正在寻找捕获,然后确定图像元数据匹配与它被放入的空方块。

如果你知道任何代码示例或应用程序,我当然可以通过代码来理解,或者如果你有一些对象,事件和属性指向我会很好。

这不是一个游戏,而是一个应用程序,所以我不希望在任何游戏引擎工作,但如果这是一个简单的方法来做到这一点,那么我就是这么做的。

你可以很容易地做到这一点。 在图像上添加一个UILongPressGestureRecognizer并在动作方法中,根据手指移动更新图像的位置。 获取手势的当前位置- (CGPoint)locationInView:(UIView *) 。 每次移动时,您都可以检查图像框架是否与目标区域的框架重叠,如果是,请将其卡入到位。

检查重叠是相当简单的(给定的图像和目标都是相同的视图层次结构的一部分):

 CGRect imageRect = [image convertRect:image.frame toView:[image superview]]; CGRect targetRect = [target convertRect:target.frame toView:[image superview]]; if (CGRectIntersectsRect(imageRect, targetRect)) { // overlap } 

如果用户掉到外面,要移回图像,可以使框架或中心animation回到原始位置。 所以,当拖动开始时,你的动作方法被调用。 你检查你的实例variables,我们把它命名为originalCenter ,不等于CGPointZero 。 如果是,则将当前中心logging到originalCenter中。

然后,当用户放弃图像,并超过目标时,将其移回:

 [UIView animateWithDuration:0.2 animations:^{ image.center = originalCenter; self.originalCenter = CGPointZero; }];