У меня есть UIScrollView ontop моего UIViewController, воссоздающий эффект, как в приложении iPhone Gowalla, когда вы находитесь на странице места. В моем представлении прокрутки у меня есть кнопка, в которой я хочу выполнить ее действие, даже когда кадр представления прокрутки покрывает его (где он находится на кнопке, вид прокрутки прозрачный). Как мне сделать что-то подобное? Является ли это возможным? (это должно быть, Gowalla [так или иначе] сделал это)Как получить UIView под UIScrollView для обнаружения касаний?
ответ
Я понятия не имею, что может сделать это приложение «Gowalla»; Надеемся, ваше описание «кнопки за просмотром прокрутки, которую вы можете коснуться» через «прокрутку», является точной.
Если ваша кнопка позади прокрутки может быть размером, чтобы заполнить всю область прокрутки, не закручивая интерфейс, самым простым решением было бы просто поместить его в прокрутку (под всеми другими видами) и делать именно это.
В противном случае наилучшим вариантом является создание пользовательского представления с четким фоном для размещения в прокрутке, как указано выше. Легкое решение состоит в том, чтобы пользовательский вид (возможно, UIControl) просто делал все, что касалось кнопки. Если по какой-то причине это невозможно, лучшим вариантом будет переопределение hitTest:withEvent:
в пользовательском представлении, чтобы вернуть основную кнопку. Я опасаюсь переопределить hitTest:withEvent:
на самом экране прокрутки, так как это может помешать прокрутке.
Попробуйте добавить кнопку в верхней части прокрутки. Единственная проблема с этим - если вы нажмете кнопку, вы не сможете взаимодействовать с scrollView, но она все равно будет видна.
Как для меня, я передам событие касания к другому взгляду путем переопределить следующие методы.
- - touchesBegan: withEvent:
- - touchesMoved: withEvent:
- - touchesEnded: withEvent:
- - touchesCancelled: withEvent:
Как таким образом,
- (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];
}
Трассировка: withEvent: используется для определения, какое представление должно сенсорный ответ событие на дереве вид иерархии. Если представление не хочет реагировать на событие касания, оно вернет нуль в hitTest. В результате вышеупомянутые методы события касания не будут вызываться.
Это хороший ответ. Я ценю это. –