2015-11-05 2 views
1

Я построил проект, который имеет mapView (Google Maps), tableView и UIScrollView. TableView находится внизу, и когда приложение запускается, вы видите действительно небольшую его часть, и большая часть ее находится вне экрана (внизу). Когда пользователь прокручивает, отображается tableView и поднимается со дна, пока он не охватывает весь экран. Это все работает, но у меня есть одна небольшая проблема: я хочу, чтобы пользователь мог коснуться карты (масштабировать, перемещать и т. Д.), Но UIScrollView находится поверх карты, и когда пользователь пытается взаимодействовать с картой, scrollView обнаруживает свиток, и карта не получает события касания. Есть ли способ, которым UIScrollView не обнаружит касание области карты? scrollView должен охватывать весь экран для обнаружения tableView (или, может быть, нет, и есть другой способ?), И я не хочу, чтобы карта была подклассом scrollView, потому что она будет расти вместе с таблицей, когда пользователь прокручивает (Я хочу, чтобы tableView пошел вверх по карте, а не с ней). Спасибо!Обнаружение касаний под UIScrollView

+0

Возможно, вам потребуется уточнить, за что это вы. Вы хотите, чтобы tableView находился поверх карты, но не получал никаких прикосновений? – Alex

+0

Как вы делаете что-то, это будет немного сложно. Вы должны сделать запуск scrollview в нижней части карты, затем с помощью автоматического макета и обновления ограничений по высоте, обновите пространство прокрутки в верхней части экрана при прокрутке пользователя. Таким образом, вы сможете прикоснуться к карте, даже если ее отображает только 20 пикселей над списком прокрутки. Также вы должны опубликовать соответствующий код и картинку, чтобы помочь каждому понять, что именно вы пытаетесь сделать. –

+0

@MSU_Bulldog, как я могу обновить ограничения по высоте? Возможно, вы знаете имя функции (ObjC) – Yahllilevy

ответ

0

Отказ от комментариев. Вам нужно будет установить верхнее пространство для ограничения просмотра в представлении прокрутки. Создайте IBOutlet для ограничения и переменной float для значения ограничения, а также подключите его к вашему верхнему пространству для ограничения супервизора, которое вы создадите в построителе интерфейса в scrollview.

в вашем .h:

IBOutlet NSLayoutConstraint *topSpace; 
float topSpaceValue; 

Затем обновите это ограничение с помощью этого:

topSpace.constant = topSpaceValue; 

Вы можете обнаружить прокрутки в Scrollview с этим методом и установить topSpace ограничение:

-(void)scrollViewDidScroll:(UIScrollView *)scrollView { 
    topSpace.constant = topSpaceValue; 
} 

Теперь фактическая логика определения того, как быстро перемещается прокрутка, и какое значение для набор для topSpaceValue зависит от вас, чтобы понять. Также вам нужно будет определить, в каком направлении перемещается прокрутка, чтобы увеличить или уменьшить значение topSpaceValue.

Это очень похоже на ссылку, что необходимо для определения скорости: iPhone UIScrollView Speed Check

Так в зависимости от скорости, устанавливается ограничение. И вы, вероятно, захотите проверить минимальное значение для ограничения, например 0, поэтому прокрутка не прокручивается в верхней части экрана.

Смежные вопросы