【发布时间】:2016-06-16 14:51:57
【问题描述】:
我遇到了一些非常奇怪的问题。基本上,我正在实现一个拖放视图,并与水平一维网格对齐。好吧,所以当我拖动一个视图并且它的中心坐标 X 大于或小于另一个视图时,未拖动的视图应该在其原始位置的左侧或右侧进行动画处理。
这在大多数情况下都可以正常工作。但在某些特殊情况下,它不起作用。在某些特定情况下,视图不再接收任何手势回调。我可以重现此问题,并发现当我删除应用动画的代码时,一切正常。
基本上这是当被拖动的视图位于下面的视图应该向左或向右移动的位置时调用的代码
/**
* Animate element to its saved position
*/
- (void)switchElement:(unsigned int)draggedIndex with:(unsigned int)otherIndex
{
// first animate
UIView *view = views[draggedIndex];
UIView *otherView = views[otherIndex];
// IF I COMMENT THIS OUT, EVERYTHING WORKS FINE
otherView.frame = [self getImageRectForIndex:draggedIndex];
// now switch internally
if(draggedIndex != otherIndex)
{
// switch views
views[draggedIndex] = otherView;
views[otherIndex] = view;
}
}
如果我为 UIView 设置动画并附加手势识别器,是否有什么需要考虑的?
如果有人愿意,我可以把全班贴在这里测试一下。
解决方案
我的设计中有一些“亮点”观点。我无意中将相关视图移到了那些透明背景视图后面。所以现在我不使用addSubview:,而是使用insertSubview:atIndex:。
但是将@Anthonin C. 的答案标记为正确的答案。因为它为我指明了正确的方向(我通过覆盖 hitTest: 方法找到了它)
【问题讨论】:
-
您的动画是否阻碍了用户交互?搜索 UIViewAnimationOptionAllowUserInteraction,它可能会对您有所帮助。例如stackoverflow.com/questions/5181216/…
-
好吧,我简化了代码。它没有连接到动画。因为直接设置框架似乎也屏蔽了所有手势回调
-
我用一个简单的例子创建了一个仓库
标签: ios objective-c iphone uiview drag-and-drop