Прокрутка 3D Touch Peek Like Mail
Используя функциональность 3D Touch Peek и Pop, какой наиболее эффективный способ имитировать возможности, описанные ниже (проведите по экрану "подсмотренное" содержимое, чтобы выполнить действие)? Снимок экрана приведен из исходного приложения iOS для iOS.
![Mail Swipe 3D Touch - Корзина]()
Ответы
Ответ 1
Обновление
Вы можете воспроизвести этот эффект на iOS 10. Там появился новый набор API, называемый UIPreviewInteraction
и UIPreviewInteractionDelegate
, которые позволяют настраивать презентацию для взаимодействия peek/pop. Я настоятельно рекомендую смотреть Peek at 3D Touch с этого года WWDC.
Оригинальный ответ
Глядя на iOS Runtime Headers, есть класс под названием UIPreviewPresentationController
. То, что диспетчер отвечает за peeks. Внутри него есть ссылки на объекты с именем leadingPreviewAction
и trailingPreviewAction
. Они имеют соответствующие свойства, которые касаются краевых ограничений и центров. Судя по использованию терминов, ведущих и завершающих (как в Auto Layout), они могут соответствовать элементам действия влево/вправо.
Это предположение, но я думаю, что эти связанные частные классы (_UIPreviewQuickActionView
) контролируют поведение, которое вы ищете. Сейчас они недоступны.
Аналогично, в документации для UIPreviewAction
говорится:
Действие предварительного просмотра или быстрого действия быстрого доступа отображается под просмотром , когда пользователь просматривает просмотр вверх. Быстрое действие peek обычно выбирает глубокую ссылку на ваше приложение и имеет заголовок, стиль и обработчик.
Ответ 2
Чтобы использовать быстрые действия Peek, ваш detailledViewControler (или то, что вы назвали его) должен переопределить previewActionItems
следующим образом:
lazy var previewActions: [UIPreviewActionItem] = {
func previewActionForTitle(title: String, style: UIPreviewActionStyle = .Default) -> UIPreviewAction {
return UIPreviewAction(title: title, style: style) { previewAction, viewController in
guard let detailViewController = viewController as? DetailViewController,
item = detailViewController.detailItemTitle else { return }
print("\(previewAction.title) triggered from `DetailViewController` for item: \(item)")
}
}
let action1 = previewActionForTitle("Default Action")
let action2 = previewActionForTitle("Destructive Action", style: .Destructive)
let subAction1 = previewActionForTitle("Sub Action 1")
let subAction2 = previewActionForTitle("Sub Action 2")
let groupedActions = UIPreviewActionGroup(title: "Sub Actions…", style: .Default, actions: [subAction1, subAction2] )
return [action1, action2, groupedActions]
}()
override func previewActionItems() -> [UIPreviewActionItem] {
return previewActions
}
Здесь вы можете найти весь код: https://developer.apple.com/library/ios/samplecode/ViewControllerPreviews/ViewControllerPreviewsUsingtheUIViewControllerpreviewingAPIs.zip