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: location] с тем же расположением я получаю слой правильного вида ! Что здесь происходит ...?

5
задан Aviad Ben Dov 22 October 2010 в 10:38
поделиться