Используя функциональность 3D Touch Peek и Pop, какой наиболее эффективный способ имитировать возможности, описанные ниже (проведите по экрану "подсмотренное" содержимое, чтобы выполнить действие)? Снимок экрана приведен из исходного приложения iOS для iOS.
Прокрутка 3D Touch Peek Like Mail
Ответ 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