2017-02-10 4 views
2

Я хочу, чтобы иметь возможность пронестись по моему главному контроллеру просмотра и отключить мой второй контроллер просмотра сверху. Я хочу, чтобы этот переход был интерактивным в том смысле, что вы можете идти туда и обратно между VC без необходимости завершения всего перехода (следуя пальцу пользователя, как scrollview с пейджингом).Использование распознавателя жестов с помощью джойстика, чтобы сбить контроллер вида

Этот эффект можно увидеть при перемещении между контроллерами View на новом обновлении snapchat. Когда вы впервые открываете приложение, вы находитесь на экране камеры. Если вы проведите пальцем в любом направлении (вверх, вниз, влево или вправо), появится соответствующее изображение и коснется экрана камеры. Когда вы прокручиваете между видами, они по существу закрывают основной вид (не перемещая его в сторону, как во многих учебниках, я нахожу онлайн, которые используют scrollview для достижения этого эффекта).

По существу это будет выглядеть как вертикальный диспетчер просмотра страниц, но вместо того, чтобы перемещать текущий контроллер представления с экрана, когда новый входит, новый будет охватывать текущий, пока он полностью не окажется над ним.

Из того, что я понимаю, распознающий жест жесты мог сделать трюк. Кто-нибудь знает, как я могу это сделать. Я искал вечность и не могу понять.

ответ

2

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

Хорошо, так что вы описываете пользовательскую интерактивную анимацию перехода. Точные данные о том, как вы это реализуете, зависят от того, хотите ли вы, чтобы это был переход на push или настоящий (модальный) переход. Я предполагаю, что это должен быть презентационный (модальный) переход.

Итак, вы начнете с установки представленного контроллера transitioningDelegate. Оттуда вылетает все. Сковороду жест распознаватель будет вызывать present, и методы делегируют переходящие делегат будут называться:

  • animationController(forPresented:presenting:source:)
  • interactionControllerForPresentation(using:)

Контроллер взаимодействия, которое вы возвращаетесь из второго метода отвечает реагирование для каждого изменения жесты панорамы путем обновления «кадра» анимации (а также координатора перехода).

Если это только для iOS 10, это очень просто, потому что вы можете использовать UIViewPropertyAnimator. Он обладает замечательной способностью «спешить» до конца или начала анимации, когда жест заканчивается, и вы решили завершить или отменить анимацию. В противном случае вам, вероятно, лучше всего использовать объект UIPercentDrivenInteractiveTransition, чтобы помочь вам.

+0

это именно то, что мне нужно, я понимаю, как это работает, но мне трудно понять, как его реализовать. Если вы не возражаете, пожалуйста, объясните немного еще немного. – user6520705

+0

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

+0

У меня нет примера для интерактивного представленного контроллера представления, но у меня есть один для другого типа перехода, поэтому скачайте его и попробуйте: https: // github.com/mattneub/Programming-iOS-Book-Examples/blob/master/bk2ch06p296customAnimation2/ch19p620customAnimation1/AppDelegate.swift Это контроллер панели табуляции, в котором вы перетаскиваете бок, чтобы отобразить следующее представление. Код показывает взаимодействие между жестом и аниматором. – matt

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