iOS 在容器内移动视图会混淆触摸区域
Posted
技术标签:
【中文标题】iOS 在容器内移动视图会混淆触摸区域【英文标题】:iOS moving views within a container confuses the touch region 【发布时间】:2013-01-09 20:11:46 【问题描述】:我故意在视图容器中放置了 2 个视图(表视图),它们部分重叠。视图 B 与视图 A 的大约 50% 重叠。
当我以编程方式移动视图 B 使其不再重叠时,视图 A 中先前重叠的区域不会响应触摸事件,也就是说,约 50% 不会。只有最初没有重叠的区域才会这样做。此外,在视图 B 中,现在在父视图中占用新空间的部分不响应触摸事件,只响应恰好占用旧区域的视图部分。
我用来移动视图的代码很简单:
UIView* viewB = [self.childViewControllers.lastObject view];
CGRect rect = viewB.frame;
rect.origin.x += 200;
[UIView animateWithDuration:0.2 animations:^
viewB.frame = rect;
];
在视觉上,视图会移动,但触摸区域不会。
我使用 ios 6 中新的故事板“容器视图”机制来最初放置视图。
我不知道为什么会这样。有什么想法吗?
谢谢。
【问题讨论】:
我使用的动画块与问题无关。事实上,我根本不需要动画块,问题仍然存在。如果我希望在动画期间进行用户交互,建议的选项很有用。这不像触摸事件不起作用,它们在视图的一部分上不起作用 - 它最初重叠的部分。就好像我的应用仍然认为我的视图没有移动一样。 【参考方案1】:事实证明,当 xCode 在我的故事板中添加“容器视图”时,它会将我的视图嵌入到父视图中。所以我需要做以下事情:
UIView* viewB = [[self.childViewControllers.lastObject view] superview];
CGRect rect = viewB.frame;
rect.origin.x += 200;
[UIView animateWithDuration:0.2 animations:^
viewB.frame = rect;
];
因为容器将我的视图嵌入到它自己的视图中,所以我需要获取超级视图并使用它。
如果我以编程方式完成所有这些操作,即添加容器并使用容器 API 查看我自己,我的原始代码就可以工作。
【讨论】:
哇,这已经困扰了我一个小时了。感谢您发布您自己问题的答案!以上是关于iOS 在容器内移动视图会混淆触摸区域的主要内容,如果未能解决你的问题,请参考以下文章
iOS Swift ScrollView、UITableView、滚动区域
子 UIViewController 视图阻止容器 UIViewController 视图接收触摸事件