1

iOS 8, Swift. Я пытаюсь просмотреть вертикально прокрутку по горизонтальной прокрутке. Они оба UIScrollViews. Вид вертикальной прокрутки позволяет открывать снизу снизу. В верхней части экрана есть спейсер, который использует ширину 1 пиксель, но высоту экранов.Вертикальный UIScrollView над горизонтальным UIScrollView

Это прекрасно работает, пока основной вид сам по себе не является прокруткой, чтобы поддерживать горизонтальную прокрутку.

Мне как-то нужно передать левую/правую жесты панорамы в подвью, которая является UIScrollView.

В настоящее время вертикальный вид прокрутки верхнего уровня фиксирует все жесты и не позволяет вести горизонтальный прокрутки в виде событий.

Я пробовал различные комбинации меток hitTest, gestureRecognizer, подклассов scrollview, но придумал хорошее чистое решение.

Я могу использовать hitTest для передачи событий в горизонтальное представление прокрутки при нажатии на пустое пространство в верхней части вертикального представления прокрутки, но тогда вертикальное представление прокрутки никогда не обрабатывает панорамирование или салфетки, чтобы показать содержимое, которое должно появляться на экране.

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

+0

Хорошо, так сенсорные события являются проблемой, Yessir, у меня нет времени, чтобы уточните, как я это исправит, но у меня есть несколько советов для вас, сначала выключите, установите drectionalLockEnabled в TRUE для обоих видов прокрутки, а во-вторых, установите в свой scrollviewDidScrollMethod, попробовали ли вы это, если бы у вас даже было 1 касание, через: \t if (scrollView == _ verticalScrollView) { \t \t [_verticalScrollView setContentOffset: CGPointMake (0, scrollView.contentOffset.у)]; \t} else { \t \t [_horizontalScrollView setContentOffset: CGPointMake (scrollView.contentOffset.x, 0)]; – Loxx

+0

и еще одна идея, и вот как я это делаю, это использовать три scrollViews, 1 scrollview, который пуст и прозрачен, который находится поверх других двух прокруток, и это прокрутка позволяет перемещаться вверх и вниз и вокруг, затем вы делаете это: \t [_verticalScrollView setContentOffset: CGPointMake (0, _invisibleScrollView.contentOffset.y)]; \t [_horizontalScrollView setContentOffset: CGPointMake (_invisibleScrollView.contentOffset.x, 0)]; и, конечно же, вы не разрешаете события касания на горизонтальном или вертикальном просмотре прокрутки, только верхнее прокручивание, которое является полунезависимым, – Loxx

+0

. Часть проблемы заключается в том, что я не знаю, как иметь верхний вид прокрутки, условно проходящий жест жеста к горизонтальному представлению прокрутки. Если я переопределяю hitTest, я могу сделать все события доступными к нижнему SV, ни одному из них. Мне нужно условно, чтобы горизонтальная панорама переместилась в нижний вид прокрутки. – David

ответ

3

Вот краткий способ, который может помочь вам:

Obj-C:

создать вид прокрутки, который невидим, а затем передать смещение невидимой точки зрения прокрутки или событий прикосновения к взгляды прокрутки ниже в зависимости от смещения сенсорных событий на верхней невидимой точки зрения прокрутки, которая охватывает две основные взгляды прокрутки:

-(void)scrollViewDidScroll:(UIScrollView *)scrollView { 
    [_verticalScrollView setContentOffset:CGPointMake(0, _insivibleScrollView.contentOffset.y)]; 
    [_horizontalScrollView setContentOffset:CGPointMake(_insivibleScrollView.contentOffset.x, 0)]; 
} 

Вы создаете невидимый вид прокрутки и невидимыми , Я имею в виду, что вам, возможно, придется поддерживать значение альфа, равное 0,01. Вы не разрешаете пользователю взаимодействовать с горизонтальным и вертикальным представлениями прокрутки, но вместо этого используете метод выше, чтобы, когда пользователь коснулся невидимого вида прокрутки, вы переводите эти штрихи в вид прокрутки ниже, которые заблокированы, чтобы реагировать только на смещение невидимого прокрутки. Как вы уже заявили в своем комментарии, скорее всего, этот ответ отвечает вашим индивидуальным потребностям, но это основная «основа», которая даст вам эффект, который вы, вероятно, захотите.

Swift:

Такой же метод, что и выше, но вот функция, что вам нужно:

func scrollViewDidScroll(scrollView: UIScrollView!) { 
    verticalScrollView.contentOffset = CGPointMake(0, invisibleScrollView.contentOffset.y) 
    horizontalScrollView.contentOffset = CGPointMake(invisibleScrollView.contentOffset.x, 0) 
} 
+0

Эта идея использования невидимого выгравированного прокрутки и использования его содержимогоОффсет для анимации позади является блестящим! Спасибо :) – Ole

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