设置view.center使我的按钮不起作用

时间:2010-02-06 08:10:57

标签: iphone

我正在开发一个横向视图iPhone应用程序。我旋转视图,然后在其中添加另一个视图,我在下面的代码中称为“horizo​​ntalView”。添加完之后,我将它重新放在中间位置。这可以很好地重新正确地居中,但问题是,我在mainView中的按钮开始不起作用。

 // Add the horizontal controller
 HorizontalContainerViewController* c = [[HorizontalContainerViewController alloc]
                       initWithNibName:@"HorizontalContainerViewController"
           bundle:nil];
 self.horizontalView        = [c view];
 self.horizontalView.center = CGPointMake(160, 240); // <----  PROBLEM HERE
 [containerView addSubview:horizontalView];

 // Initially show the main view
 self.mainViewController = [MainViewController createFor: self];
    [self.horizontalView addSubView:self.mainViewController];

如果我删除标记为“PROBLEM HERE”的行,我在mainViewController.view中的按钮工作正常。如果我添加这一行,他们就开始不响应我的触摸。可能会发生什么?

编辑:顺便说一句......我注意到靠近视图边缘的一些按钮不起作用,而视图中间的一些按钮工作得很好。

谢谢,

-Steve

1 个答案:

答案 0 :(得分:1)

我想出来了。看来,在iPhone应用程序中,如果最底层的视图没有覆盖窗口区域的某些部分,那么该区域基本上不接受“触摸”事件。

E.g you have 320x480 window area
    you add a view of 320x480 to the window, which originally covers the same area
    you rotate the view 90 degree left
    Now, you have a vertical view that only covers the middle portion of the window area.
    Something like:

    |--------|
    |        |
----+--------+----
|   |        |   |<-- your window area
| B |   A    | C |
|   |        |   |
----+--------+----
    |        |<-- rotated view (your bottom-most view)
    |--------|

然后,您添加其他子视图以最终覆盖整个景观区域。 (A + B + C) 但是,由于您的原始视图未覆盖B和C区域,因此任何碰巧放置在区域B和C中的控件都不会获得触摸事件。

在我的情况下,当我设置中心属性时,一些现有按钮落入上图中B或C等未覆盖区域。这就是为什么过去工作的一些按钮开始无法工作的原因。

经验教训:

1)旋转添加到窗口的最底部视图

并不是一个好主意

2)(我没试过这个但是)在最底部的视图中设置“剪辑子项”是有帮助的,这样您就会注意到屏幕的某些区域是否可能不会处理触摸事件。 / p>

-Steve