pet*_*nic 3 iphone uiview ipad ios
我有以下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)
谢谢
Jir*_*iri 13
您需要hitTest:(CGPoint)point withEvent:(UIEvent *)event在MainView中实现.
位于接收者界限之外的点永远不会被报告为命中,即使它们实际上位于接收者的子视图中.如果父视图的clipsToBounds属性设置为NO,则子视图可以在视觉上超出其父视图的范围.但是,命中测试总是忽略父视图边界之外的点.
发表评论:
你应该继承UIView.然后将nib中的MainView类设置为UIView子类.
这里讨论了一些测试,但我无法找到它的工作原理.
我还没有测试过,但以下代码可能会满足您的需求:
- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
for(UIView *subview in self.subviews)
{
UIView *view = [subview hitTest:[self convertPoint:point toView:subview] withEvent:event];
if(view) return view;
}
return [super hitTest:point withEvent:event];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3795 次 |
| 最近记录: |