Реалізація 3D Touch Peek and Pop для iOS-програми
3D Touch (iPhone 6s–X) дозволяв «заглянути» в контент без переходу — Peek (легке натискання, предпросмотр) та Pop (сильне натискання, повний перехід). З iPhone XR та iOS 13 функціональність перейшла на Haptic Touch через UIContextMenuInteraction та UIPreviewInteractionDelegate. Сучасна реалізація через UIContextMenuInteraction працює на всіх пристроях — і на 3D Touch, і на Haptic Touch.
Сучасний підхід: UIContextMenuInteraction з preview
func contextMenuInteraction(
_ interaction: UIContextMenuInteraction,
configurationForMenuAtLocation location: CGPoint
) -> UIContextMenuConfiguration? {
// Peek — кастомний preview controller
let previewProvider: UIContextMenuContentPreviewProvider = {
let previewVC = ArticlePreviewViewController(article: self.article)
previewVC.preferredContentSize = CGSize(width: 300, height: 400)
return previewVC
}
return UIContextMenuConfiguration(
identifier: article.id as NSString,
previewProvider: previewProvider
) { _ in
UIMenu(title: "", children: [
UIAction(title: "Відкрити") { [weak self] _ in self?.openArticle() },
UIAction(title: "Зберегти") { [weak self] _ in self?.saveArticle() }
])
}
}
// Pop — дія при тапі на preview
func contextMenuInteraction(
_ interaction: UIContextMenuInteraction,
willPerformPreviewActionForMenuWith configuration: UIContextMenuConfiguration,
animator: UIContextMenuInteractionCommitAnimating
) {
animator.addCompletion { [weak self] in
self?.openArticle()
}
}
willPerformPreviewActionForMenuWith — аналог старого Pop: спрацьовує коли користувач тапає на preview, щоб відкрити повністю. animator.addCompletion виконується після анімації переходу.
Ориентири по срокам
Реалізація Peek and Pop через UIContextMenuInteraction з кастомним preview controller — 1 робочий день. Включає тестування на iPhone з 3D Touch (6s–X) та Haptic Touch (XR та новіші).







