虽然大多数苹果文档编写得很好,但我认为" iOS事件处理指南 "是一个例外.我很难清楚地了解那里描述的内容.
该文件说,
在命中测试中,窗口调用
hitTest:withEvent:视图层次结构的最顶层视图; 此方法通过递归调用pointInside:withEvent:视图层次结构中返回YES的每个视图继续进行,继续向下移动层次结构,直到找到触摸发生在其边界内的子视图.该视图成为热门测试视图.
那么只有hitTest:withEvent:系统调用最顶层的视图,调用pointInside:withEvent:所有子视图,如果从特定子视图返回是YES,那么调用pointInside:withEvent:该子视图的子类?
我有两个视图控制器.视图控制器A具有UIScrollView并呈现视图控制器B.该演示是交互式的并由控制器控制scrollView.contentOffset.
我想整合一个交互式消除过渡:当平移时,ViewController B应该以交互方式被解雇.交互式dismiss转换还应控制ViewController的scrollView.
我的第一次尝试是使用a UIPanGestureRecognizer并scrollView.contentOffset根据平移距离进行设置.这是有效的,但是当平移手势结束时,必须将scrollView偏移设置为最终位置的动画.使用-[UIScrollView setContentOffset:animated:不是一个好的解决方案,因为它使用线性动画,不考虑当前的平移速度并且不会很好地减速.
所以我认为应该可以将我的平移手势识别器中的触摸事件提供到滚动视图中.这应该给我们所有漂亮的滚动视图动画行为.
我尝试覆盖-touchesBegan/Moved/Ended/Cancelled withEvent:我的UIPanGestureRecognizer子类中的方法,如下所示:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[scrollView touchesBegan:touches withEvent:event];
[scrollView.panGestureRecognizer touchesBegan:touches withEvent:event];
[super touchesBegan:touches withEvent:event];
}
Run Code Online (Sandbox Code Playgroud)
但显然有些东西阻止滚动视图进入tracking模式.(确实如此,dragging = YES但这就是它.)我验证了scrollView是userInteractionEnabled,而不是隐藏并添加到视图层次结构中.
那么我怎样才能将我的触摸事件转发给UIScrollView?
我有一个UIButton的问题,它在iOS6中运行得非常好,但是在某些时候无法响应iOS7中的触摸事件.澄清请看下图:

失败的按钮是UIView中的"全部丢弃"按钮.(请注意,此按钮仅暂时禁用,这不是问题.我只是没有启用按钮的最新测试的屏幕截图")
除非首先按下UITableViewCell中的"Discard"或"Retry"按钮,否则此按钮将忽略所有触摸.(这确实会导致重新加载视图控制器,这会触发再次调用ViewDidLoad等生命周期方法.)在按下表格视图单元格中的"放弃"或"重试"按钮后,"全部放弃"按钮开始正常运作.
视图和"全部丢弃"按钮构建在Controller的XIB文件上,而不是代码中.这仅在iOS7上失败,并在触摸taleview单元格按钮后立即开始工作.
有人有主意吗?
谢谢!
我想知道如何让用户滚动到UIScrollView的边界之外?
我有以下UIVIew架构(x,y,宽度,高度):
- MainWindow (0,0,768,1024)
- MainView (0,0,768,80)
- containerview (500,40,120,80)
- subview (500,40,120,80)
-some buttons
Run Code Online (Sandbox Code Playgroud)
我的问题是子视图的底部位于MainView的边界之外.子视图底部的按钮没有响应.顶部的那个是响应式的,因为它们的位置也在Mainview内部.
因此,当我尝试单击子视图底部的按钮时,我实际上点击了MainWindow!子视图底部按钮的位置不在MainView内部
有没有办法让我的所有子视图都可用,即使它的一半在MainView绑定之外?
我知道我可以直接在MainWindow下创建子视图,但我不想重做我的代码.
更新 如何设计我的视图:A = MainWindow,B = MainView,C =容器视图,D =子视图,X =我要点击的位置
+----------------------------+
|A |
|+-------------------------+ |
||B | |
|| +----------+ | |
|+------------|C&D |-+ |
| |X | |
| +----------+ |
+----------------------------+
Run Code Online (Sandbox Code Playgroud)
谢谢
ios ×4
iphone ×3
objective-c ×2
uiscrollview ×2
uiview ×2
bounds ×1
cocoa-touch ×1
ipad ×1
uibutton ×1
uikit ×1