我有一个视图层次结构,它包含滚动视图上的较小视图。每个视图都可以有其中的子视图,例如按钮等。hitTest返回错误UIView
由于某种原因,视图上的按钮未被点击;探索这进一步表明,虽然滚动视图收到touchBegan事件,按钮不会。调用hitTest:event:消息显示该按钮不被返回,即使它在限制范围内。
我已经包含了一个日志输出,描述触摸在滚动视图上的位置,从hitTest返回的项目,触摸位置(如果我调用了locationInView):使用期望的项目以及期望项目的层次结构)。从这个输出我可以推断,按钮应该已被称为...
任何人都可以解释这一点吗?我错过了什么吗?
touched ({451, 309}) on <VCViewContainersView: 0x4b31ee0; frame = (0 0; 748 1024); transform = [0, 1, -1, 0, 0, 0]; autoresize = W+H; layer = <CALayer: 0x4b32130>> (location in expected item: {17, 7.5})
expected touched item is:
view: <UIButtonLabel: 0x482b920; frame = (32 5; 36 19); text = 'Click'; clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x4831370>>, layer transform: [1, 0, 0, 1, 0, 0]
view: <UIRoundedRectButton: 0x482c100; frame = (50 50; 100 30); opaque = NO; layer = <CALayer: 0x482c450>>, layer transform: [1, 0, 0, 1, 0, 0]
view: <UIImageView: 0x480f290; frame = (0 0; 320 255); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x480e840>>, layer transform: [1, 0, 0, 1, 0, 0]
view: <VCViewContainer: 0x4b333c0; frame = (352 246.5; 320 471.75); layer = <CALayer: 0x4b33d50>>, layer transform: [1, 0, 0, 1, 0, 0]
view: <UIScrollView: 0x4b32600; frame = (0 0; 1024 748); clipsToBounds = YES; autoresize = W+H; userInteractionEnabled = NO; layer = <CALayer: 0x4b32780>>, layer transform: [1, 0, 0, 1, 0, 0]
view: <VCViewsContainerView: 0x4b31ee0; frame = (0 0; 748 1024); transform = [0, 1, -1, 0, 0, 0]; autoresize = W+H; layer = <CALayer: 0x4b32130>>, layer transform: [0, 1, -1, 0, 0, 0]
view: <UIWindow: 0x4b1d590; frame = (0 0; 768 1024); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x4b1d6d0>>, layer transform: [1, 0, 0, 1, 0, 0]
更新:除了一个UIWindow和VCViewsContainerView,创建所有视图以编程方式使用initWithFrame:方法或按钮,buttonWithType的情况:。 VCViewContainer使用CGRectZero进行初始化,并且在创建UIImageView时,其帧被设置为图像大小+底部标签的额外空间。
更新2:当调用[self.layer则hitTest:位置]以相同的位置,我得到的正确视图层!这里发生了什么...?
UIRoundedRectButton *是*按钮。 – kennytm 2010-10-22 08:42:27
我们需要看看你是如何创建你的视图层次结构... InterfaceBuilder,代码等... – jv42 2010-10-22 08:47:51
@KennyTM:如果它不清楚,它说“触摸(位置)(实际上触摸的项目)”。请注意,触摸的项目是VCViewContainerView和_not_ UIRoundedRectButton。 – 2010-10-22 08:49:12