Как получить UIView под UIScrollView для обнаружения касаний? - PullRequest
7 голосов
/ 20 марта 2011

У меня есть UIScrollView поверх моего UIViewController, воссоздающего эффект, как в приложении Gowalla для iPhone, когда вы находитесь на странице рекламного ролика. Под моим представлением прокрутки у меня есть кнопка, которую я хочу выполнять, даже когда рамка вида прокрутки закрывает ее (там, где она находится над кнопкой, представление прокрутки очищено). Как бы я сделал что-то подобное? Является ли это возможным? (должно быть, Гоулла [как-то] сделал это)

Ответы [ 3 ]

2 голосов
/ 20 марта 2011

Что касается меня, я перенесу событие касания в другое представление путем переопределения следующих методов.

  • - прикосновения начались: с события:
  • - касанияПеремещено: с событием:
  • - прикосновенияВокруглено: с событием:
  • - касания отменены: с событием:

Вот так,

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
     // pass touch event by default implement.
     [super touchesBegan:touches withEvent:event]; 

     // redirect the touch events. 
     [anotherView touchesBegain:touches withEvent:event];    
}

hitTest: withEvent: используется для определения того, какое представление должно реагировать на событие касания в дереве иерархии представлений. Если представление не хочет отвечать на сенсорное событие, оно вернет ноль в hitTest. В результате вышеописанные методы сенсорного события не будут вызываться.

0 голосов
/ 20 марта 2011

Попробуйте добавить кнопку поверх вида прокрутки.Единственная проблема в том, что если вы нажмете кнопку, вы не сможете взаимодействовать с scrollView, но он все равно будет виден.

0 голосов
/ 20 марта 2011

Я понятия не имею, что может делать это приложение "Gowalla"; надеюсь, ваше описание «кнопки позади вида прокрутки, которую вы можете нажать» через «представление прокрутки», является точным.

Если размер кнопки за представлением прокрутки можно изменить, чтобы заполнить всю область представления прокрутки contentSize, не повредив интерфейс, самым простым решением было бы просто поместить ее в представление прокрутки (под всеми остальными представлениями). ) и просто сделай это.

В противном случае, вам лучше всего создать пользовательский вид с четким фоном, который будет помещен в вид с прокруткой, как указано выше. Простое решение состоит в том, чтобы пользовательский вид (вероятно, UIControl) просто делал все, что касалось кнопки. Если по какой-либо причине это невозможно, лучшим вариантом будет переопределение hitTest:withEvent: в пользовательском представлении для возврата соответствующей кнопки. Я бы с осторожностью переопределил hitTest:withEvent: в самом представлении прокрутки, так как это может помешать прокрутке.

...