3D Touch — хардверска технологија компаније Apple која препознаје снагу притиска на екрану iPhone-а и његова софтверска замена Haptic Touch, која ради на основу дужине додира. 3D Touch користи калибрисане сензоре притиска постављене испод матрице екрана (Force Touch) и омогућава разликовање лаког притиска (peek) од дубоког (pop). Почевши од iOS 13, Apple је заменио 3D Touch технологијом Haptic Touch — технологијом која симулира снажан притисак путем Long Press-а са тактилним повратним информацијама UIContextMenuInteraction.
Главно
3D Touch — хардверска технологија уноса, дебитована у iPhone 6S (2015). Испод површине екрана налазе се капацитивни сензори који мере растојање између стакла и позадинског осветљења. При притиску прстом, стакло се савија за микроне, сензори бележе величину деформације и претварају је у вредност силе (грами). iOS разликује три нивоа: лаки додир (touch), средњи притисак (peek, ~200 г) и дубоки притисак (pop, ~400 г).
Haptic Touch — софтверска замена за 3D Touch, представљена у iOS 13 (2019). Уместо мерења притиска, Haptic Touch користи Long Press (држање прста ~500 ms) за активирање истих радњи. Тактилна повратна информација (haptic feedback) симулира осећај "клика", иако не долази до физичког притиска. Apple је прешао на Haptic Touch због сложености и високе цене производње 3D Touch екрана, посебно при преласку на OLED панеле са Face ID-ом.
Историјски подаци: 3D Touch се појавио у iPhone 6S и задржао се до iPhone XS (2018). iPhone XR (2018) је постао први уређај са Haptic Touch-ом уместо 3D Touch-а. Од iPhone 11 (2019) и iOS 13, сви нови iPhone-и користе Haptic Touch. iPad никада није добио 3D Touch — само Haptic Touch од iPadOS 13. Apple Watch користи технологију Force Touch у екрану (разликује се од iPhone 3D Touch-а), која је уклоњена од watchOS 7 и Series 6.
Force Touch — технологија мерења снаге притиска коју Apple користи у iPhone 6S–XS (3D Touch), MacBook тракпадовима (2015+) и Apple Watch-у (Series 1–5). У основи се налазе капацитивни сензори распоређени по ободу екрана. При притиску, стакло се деформише за микроне, сензори бележе промену растојања и израчунавају силу према калибрационој кривој. Систем узима у обзир температуру околине (калибрација сваких 24 сата) и положај прста (центар екрана је осетљивији).
Калибрација — критичан аспект 3D Touch-а. Сваки iPhone се калибрише појединачно у фабрици. iOS такође врши динамичку калибрацију: при првом притиску након покретања, систем тражи максималну снагу корисника и подешава осетљивост. Сензори имају прецизност од ±10 грама, опсег — од 0 до 500+ грама. Програмер може добити вредност force преко UITouch.force (нормализовано од 0.0 до максималног) или UITouch.maximumPossibleForce.
// Провера доступности 3D Touch-а и читање снаге притиска
class ForceTouchViewController: UIViewController {
override func touchesMoved(_ touches: Set<UITouch>,
with event: UIEvent?) {
guard let touch = touches.first else { return }
// Провера подршке Force Touch-а на уређају
guard self.traitCollection.forceTouchCapability
== UIForceTouchCapability.available else {
// Уређај не подржава 3D Touch
return
}
// Читање снаге притиска (0.0 — макс)
let force = touch.force // 0.0 ... maximumPossibleForce
let maxForce = touch.maximumPossibleForce
// Нормализација у опсег 0.0–1.0 за визуелизацију
let normalizedForce = force / maxForce
// Визуелна реакција на снагу притиска (скалирање елемента)
forceView.transform = CGAffineTransform(scaleX: 1.0 + normalizedForce * 0.3,
y: 1.0 + normalizedForce * 0.3)
}
}Ограничења: 3D Touch ради само са активним додиром (UITouch.phase == .began или .moved). Након пуштања, вредност force се поништава. Максимална вредност force варира између уређаја: iPhone 6S — 6.6666, iPhone 7/X — до 20.0 (због другачије калибрације). Немојте користити force за критичне радње — корисник можда не зна којом снагом да притисне. Увек обезбедите алтернативу путем Haptic Touch-а (Long Press).
Peek and Pop — оригинални Apple UX образац, представљен са 3D Touch-ом у iPhone 6S. Peek — лаки притисак (force ~0.5–1.0) који приказује преглед садржаја (е-пошта, линк, фотографија) у облику картице за преглед. Pop — дубљи притисак (force ~2.0+) који отвара садржај на целом екрану. Peek је подржавао радње при дну (share, copy, reply), доступне превлачењем нагоре на картици за преглед.
Имплементација Peek and Pop-а у UIKit-у је укључивала три компоненте: UIViewControllerPreviewingDelegate (протокол са методама previewingContext(_:viewControllerForLocation:) и previewingContext(_:commit:)), UIPreviewAction (радње при дну) и регистрацију путем registerForPreviewing(with:sourceView:). Програмер је одређивао који ViewController да се прикаже при Peek-у и како да се отвори при Pop-у. Систем је аутоматски додавао анимацију паралаксе и замућење позадине.
| Покрет | Снага (норм.) | Радња | Визуелни ефекат |
|---|---|---|---|
| Додир (Touch) | 0.0–0.3 | Уобичајена интеракција | Истицање елемента |
| Лаки притисак (Peek) | 0.5–1.0 | Преглед садржаја | Картица са замућењем позадине |
| Дубоки притисак (Pop) | 2.0+ | Отварање на целом екрану | Анимација отварања картице |
| Превлачење нагоре | — | Радње (share, copy) | Група UIPreviewAction |
Прелазак на UIContextMenuInteraction (iOS 13): Apple је заменио Peek and Pop контекстним менијима путем UIContextMenuInteraction-а. Нови API је једноставнији: не захтева UIViewControllerPreviewingDelegate, подржава хијерархијске меније (submenus), иконице SF Symbols и ради исто са 3D Touch-ом и Haptic Touch-ом. Миграција: registerForPreviewing је застарео од iOS 13. Замените га са UIContextMenuConfiguration, који се аутоматски прилагођава могућностима уређаја.
UIContextMenuInteraction — савремени iOS API за контекстне меније, доступан од iOS 13. Додаје се било ком UIView-у путем addInteraction(_:). Делегат UIContextMenuInteractionDelegate обезбеђује конфигурацију менија: UIContextMenuConfiguration са идентификатором, previewProvider (опционално, за преглед) и actionProvider (низ UIAction или UIMenu). Контекстни мени се активира путем 3D Touch-а (ако је доступан) или Haptic Touch-а (Long Press на осталим уређајима).
// UIContextMenuInteraction са хијерархијским менијем
class ContextMenuViewController: UIViewController,
UIContextMenuInteractionDelegate {
override func viewDidLoad() {
super.viewDidLoad()
let interaction = UIContextMenuInteraction(delegate: self)
contextMenuView.addInteraction(interaction)
}
func contextMenuInteraction(_ interaction: UIContextMenuInteraction,
configurationForMenuAtLocation location: CGPoint) -> UIContextMenuConfiguration? {
return UIContextMenuConfiguration(identifier: nil,
previewProvider: { PreviewViewController() }) { _ in
let share = UIAction(title: "Подели",
image: UIImage(systemName: "square.and.arrow.up"),
handler: { _ in self.shareContent() })
let edit = UIAction(title: "Уреди",
image: UIImage(systemName: "pencil"),
handler: { _ in self.editContent() })
let delete = UIAction(title: "Обриши",
image: UIImage(systemName: "trash"),
attributes: .destructive,
handler: { _ in self.deleteContent() })
return UIMenu(title: "Радње", children: [share, edit, delete])
}
}
}UIContextMenuConfiguration подржава previewProvider — контролер који се приказује као преглед. Ако је previewProvider nil, контекстни мени се приказује без прегледа. За подешавање величине и изгледа прегледа користи се UIContextMenuContentPreviewProvider. Контекстни менији аутоматски добијају тактилне повратне информације (Haptic Touch Engine) и анимацију појављивања (scale + fade).
Haptic Touch и 3D Touch — различите технологије које воде истом резултату. 3D Touch је хардверски (сензори притиска у екрану), Haptic Touch је софтверски (Long Press + Taptic Engine за тактилну симулацију). 3D Touch захтева трошкове производње (додатни слој сензора), повећава дебљину екрана и сложеност поправке. Haptic Touch је јефтинији, једноставнији за производњу и доступан на свим савременим уређајима (iPhone SE 2020, iPhone 11–16, iPad, iPod touch).
| Параметар | 3D Touch | Haptic Touch |
|---|---|---|
| Принцип | Мерење притиска (грами) | Мерење времена (милисекунде) |
| Доступност | iPhone 6S–XS (ограничен) | iPhone XR+, iPad, iPod touch |
| Брзина | Тренутно (~100 ms) | Са кашњењем (~500 ms) |
| Нивои притиска | 2 (peek + pop) | 1 (контекстни мени) |
| Тактилна повратна информација | Taptic Engine (симулација клика) | Taptic Engine (симулација клика) |
| App Store | Quick Actions на иконици | Quick Actions на иконици |
| Калибрација | Ауто-калибрација према снази корисника | Није потребна |
| Поправљивост | Сложена (сензори у екрану) | Стандардна |
Утицај на UX: брзина 3D Touch-а је већа — корисник добија контекстни мени одмах при снажном притиску. Haptic Touch захтева паузу од 500 ms, што се осећа спорије. Међутим, Apple то компензује тактилним повратним информацијама и визуелном анимацијом. Корисници који прелазе са 3D Touch-а на Haptic Touch често примећују разлику у брзини. За програмере, миграција је транспарентна: UIContextMenuInteraction ради исто на обе технологије.
Quick Actions — контекстни мени на иконици апликације на почетном екрану. Снажан притисак (3D Touch) или Long Press (Haptic Touch) на иконици приказује до 4 брзе радње: "Нова порука" (Messages), "Сликај" (Camera), "Претрага" (Safari). Имплементира се путем Info.plist кључа UIApplicationShortcutItems или путем делегата UIApplicationShortcutItem. Quick Actions су доступни на свим уређајима са iOS 13+ (Haptic Touch) или 3D Touch-ом.
Тастатура-тракпад — снажан притисак на iOS тастатуру пребацује је у режим тракпада: тастери постају неактивни, а покрет прста помера курсор. 3D Touch је активирао тракпад снажним притиском на било ком месту тастатуре. Haptic Touch активира тракпад дугим притиском на размакницу (spacebar). Режим тракпада постао је једна од најпопуларнијих примена 3D Touch-а — корисници цене прецизно позиционирање курсора при уређивању текста.
Преглед линкова и фотографија — снажан притисак на линк у Safari-ју приказује преглед странице (peek) без преласка. Слично: притисак на фотографију у Messages-у отвара увећану верзију. Превлачење нагоре у режиму peek приказује радње: "Отвори", "Додај у листу за читање", "Копирај". Сви ови сценарији раде путем UIContextMenuInteraction-а у савременим верзијама iOS-а.
Цртање и креативне апликације — у Procreate, Photoshop и другим апликацијама за цртање, снага притиска 3D Touch-а контролише дебљину четкице, непрозирност или засићеност боје. Апликације читају UITouch.force (0.0–1.0) и претварају га у параметре алата. Међутим, за цртање Apple Pencil на iPad-у пружа прецизнију контролу притиска (са подршком за нагиб и азимут), па је 3D Touch у креативним апликацијама на iPhone-у мање тражен.
Често постављана питања
3D Touch — хардверска технологија која мери снагу притиска преко капацитивних сензора у екрану (iPhone 6S–XS). Haptic Touch — софтверска имитација која користи Long Press (држање) и тактилне повратне информације Taptic Engine-а. 3D Touch је бржи (100 ms vs 500 ms) и подржава два нивоа снаге (peek + pop). Haptic Touch је доступан на свим уређајима са iOS 13+, укључујући iPhone XR, све моделе iPhone 11–16, iPad и iPod touch.
У коду користите traitCollection.forceTouchCapability. Вредност .available — 3D Touch је подржан, .unavailable — није, .unknown — још није одређено (сачекајте traitCollectionDidChange). На уређајима са Haptic Touch-ом, forceTouchCapability враћа .unavailable, јер Haptic Touch не користи хардверске сензоре силе. За кориснике провера: Подешавања → Опште → Приступачност → 3D Touch (само на старим iPhone-има).
Apple је заменио 3D Touch Haptic Touch-ом из више разлога: висока цена производње екрана са сензорима притиска, сложеност поправке (сензори интегрисани у екран), ограничена информисаност корисника (многи нису знали за функцију) и прелазак на OLED екране са Face ID-ом, које је теже калибрисати за 3D Touch. Haptic Touch је јефтинији, једноставнији и доступан на већем броју уређаја.
3D Touch подржавају: iPhone 6S, 6S Plus, 7, 7 Plus, 8, 8 Plus, X, XS, XS Max. iPhone XR нема 3D Touch (први са Haptic Touch-ом). Сви модели iPhone 11, 12, 13, 14, 15, 16 и SE (2. и 3. генерације) користе Haptic Touch. iPad никада није имао 3D Touch. На уређајима са 3D Touch-ом доступна су и подешавања осетљивости (Подешавања → Опште → Приступачност → 3D Touch).
Да, iOS аутоматски емулира 3D Touch путем Haptic Touch-а на уређајима без хардверске подршке. API UIContextMenuInteraction ради исто на свим уређајима — систем сам бира окидач (3D Touch или Long Press). За ваш код је то транспарентно: контекстни мени се појављује на свим уређајима са iOS 13+. Не морате писати одвојену логику за 3D Touch и Haptic Touch — користите UIContextMenuConfiguration.
Резиме
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође