Реализация 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 и новее).







