Tôi có phân cấp chế độ xem có chứa các chế độ xem nhỏ hơn trên chế độ xem cuộn. Mỗi chế độ xem có thể có các bản xem trước trong đó, chẳng hạn như các nút, v.v.hitTest trả về sai UIView
Vì một số lý do, các nút trên chế độ xem không được nhấp; khám phá thêm điều này cho thấy trong khi chế độ xem cuộn sẽ nhận được sự kiện touchBegan, thì nút đó không. Gọi thông báo hitTest: event: thông báo cho biết nút không được trả lại, mặc dù nó nằm trong giới hạn.
Tôi đã bao gồm đầu ra nhật ký mô tả vị trí của cảm ứng trên chế độ xem cuộn, mục được trả về từ hitTest, vị trí của cảm ứng nếu tôi gọi locationInView: sử dụng mục được mong đợi và thứ bậc của mục được mong đợi (với khung được in). Từ đầu ra này, tôi có thể suy ra rằng nút nên đã được gọi là ...
Bất cứ ai có thể giải thích điều này? Tui bỏ lỡ điều gì vậy?
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]
Cập nhật: Khác hơn UIWindow và VCViewsContainerView, tất cả các quan điểm được tạo ra theo chương trình sử dụng initWithFrame: hoặc trong trường hợp của các nút, buttonWithType:. VCViewContainer được khởi tạo bằng cách sử dụng CGRectZero và khi UIImageView được tạo, khung của nó được đặt thành kích thước của hình ảnh + không gian bổ sung cho các nhãn ở dưới cùng của nó.
Cập nhật 2: Khi gọi [self.layer hitTest: vị trí] với cùng một vị trí, tôi nhận được lớp đúng xem ! Những gì đang xảy ra ở đây...?
UIRoundedRectButton * là * nút. – kennytm
Chúng ta cần phải xem cách bạn tạo hệ thống cấp bậc của bạn xem ... InterfaceBuilder, mã, vv ... – jv42
@KennyTM: Nếu nó không được rõ ràng, nó nói "chạm (vị trí) trên (mục thực sự đụng đến)". Lưu ý rằng mục được chạm là VCViewContainerView và _not_ UIRoundedRectButton. –