3D Touch คือเทคโนโลยีฮาร์ดแวร์ของ Apple ที่รับรู้แรงกดบนหน้าจอ iPhone และสิ่งทดแทนทางซอฟต์แวร์ Haptic Touch ซึ่งทำงานผ่านระยะเวลาการสัมผัส 3D Touch ใช้เซ็นเซอร์วัดแรงดันที่สอบเทียบแล้วซึ่งติดตั้งอยู่ใต้เมทริกซ์หน้าจอ (Force Touch) และช่วยให้แยกแยะระหว่างการกดเบา (peek) และการกดลึก (pop) ตั้งแต่ iOS 13 เป็นต้นไป Apple ได้แทนที่ 3D Touch ด้วย Haptic Touch — เทคโนโลยีที่จำลองการกดแรงผ่านการกดค้างพร้อมการตอบสนองแบบสัมผัส UIContextMenuInteraction
ประเด็นสำคัญ
3D Touch คือเทคโนโลยีอินพุตฮาร์ดแวร์ที่เปิดตัวครั้งแรกใน iPhone 6S (2015) ใต้พื้นผิวหน้าจอ เซ็นเซอร์แบบคาปาซิทีฟจะวัดระยะห่างระหว่างกระจกและแบ็คไลท์ เมื่อคุณกดด้วยนิ้ว กระจกจะโค้งงอในระดับจุลภาค เซ็นเซอร์ตรวจจับปริมาณการเสียรูปและแปลงเป็นค่าแรง (กรัม) iOS แยกแยะสามระดับ: สัมผัสเบา (touch) กดปานกลาง (peek, ~200 กรัม) และกดลึก (pop, ~400 กรัม)
Haptic Touch คือสิ่งทดแทนทางซอฟต์แวร์ของ 3D Touch ซึ่งเปิดตัวใน iOS 13 (2019) แทนที่จะวัดแรงดัน Haptic Touch ใช้การกดค้าง (Long Press ~500 มิลลิวินาที) เพื่อเปิดใช้งานการกระทำเดียวกัน การตอบสนองแบบสัมผัสจำลองความรู้สึก "คลิก" แม้ว่าจะไม่มีการกดทางกายภาพเกิดขึ้น 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 ในหน้าจอ (แตกต่างจาก 3D Touch ของ iPhone) ซึ่งถูกนำออกตั้งแต่ 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+ กรัม นักพัฒนาสามารถรับค่าแรงผ่าน 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) หลังจากปล่อย ค่าแรงจะถูกรีเซ็ตเป็นศูนย์ ค่าแรงสูงสุดจะแตกต่างกันไปตามอุปกรณ์: iPhone 6S — 6.6666, iPhone 7/X — สูงถึง 20.0 (เนื่องจากการสอบเทียบที่แตกต่างกัน) อย่าใช้แรงสำหรับการกระทำที่สำคัญ — ผู้ใช้อาจไม่รู้ว่าต้องกดแรงแค่ไหน ให้เตรียมทางเลือกอื่นผ่าน Haptic Touch (กดค้าง) เสมอ
Peek and Pop คือรูปแบบ UX ดั้งเดิมของ Apple ที่เปิดตัวพร้อม 3D Touch ใน iPhone 6S Peek คือการกดเบา (แรง ~0.5–1.0) ที่แสดงตัวอย่างเนื้อหา (อีเมล ลิงก์ รูปภาพ) ในบัตรตัวอย่าง Pop คือการกดลึกกว่า (แรง ~2.0+) ที่เปิดเนื้อหาในแบบเต็มหน้าจอ Peek รองรับการกระทำที่ด้านล่าง (แชร์ คัดลอก ตอบกลับ) ซึ่งเข้าถึงได้โดยการปัดขึ้นบนบัตรตัวอย่าง
การใช้งาน 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+ | เปิดเต็มหน้าจอ | ภาพเคลื่อนไหวขยายบัตร |
| ปัดขึ้น | — | การกระทำ (แชร์, คัดลอก) | กลุ่ม UIPreviewAction |
การเปลี่ยนไปใช้ UIContextMenuInteraction (iOS 13): Apple แทนที่ Peek and Pop ด้วยเมนูบริบทผ่าน UIContextMenuInteraction API ใหม่เรียบง่ายกว่า: ไม่ต้องการ UIViewControllerPreviewingDelegate รองรับเมนูแบบลำดับชั้น (เมนูย่อย) ไอคอน SF Symbols และทำงานเหมือนกันทั้งกับ 3D Touch และ Haptic Touch การโยกย้าย: registerForPreviewing เลิกใช้แล้วตั้งแต่ iOS 13 ให้แทนที่ด้วย UIContextMenuConfiguration ซึ่งปรับให้เข้ากับความสามารถของอุปกรณ์โดยอัตโนมัติ
UIContextMenuInteraction คือ API iOS สมัยใหม่สำหรับเมนูบริบท พร้อมใช้งานตั้งแต่ iOS 13 มันถูกเพิ่มไปยัง UIView ใดๆ ผ่าน addInteraction(_:) ตัวแทน UIContextMenuInteractionDelegate จัดเตรียมการกำหนดค่าเมนู: UIContextMenuConfiguration พร้อมตัวระบุ, previewProvider (ไม่บังคับ สำหรับการดูตัวอย่าง) และ actionProvider (อาร์เรย์ของ UIAction หรือ UIMenu) เมนูบริบทถูกเปิดใช้งานโดย 3D Touch (ถ้ามี) หรือ Haptic Touch (กดค้างบนอุปกรณ์อื่นๆ)
// 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) และภาพเคลื่อนไหวการปรากฏ (ขยาย + จาง) โดยอัตโนมัติ
Haptic Touch และ 3D Touch เป็นเทคโนโลยีที่แตกต่างกันซึ่งนำไปสู่ผลลัพธ์เดียวกัน 3D Touch คือฮาร์ดแวร์ (เซ็นเซอร์วัดแรงดันในหน้าจอ) Haptic Touch คือซอฟต์แวร์ (กดค้าง + 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 | การดำเนินการด่วนบนไอคอน | การดำเนินการด่วนบนไอคอน |
| การสอบเทียบ | สอบเทียบอัตโนมัติตามแรงผู้ใช้ | ไม่จำเป็น |
| ความสามารถในการซ่อม | ซับซ้อน (เซ็นเซอร์ในหน้าจอ) | มาตรฐาน |
ผลกระทบต่อ UX: ความเร็วของ 3D Touch สูงกว่า — ผู้ใช้จะได้รับเมนูบริบททันทีเมื่อกดแรง Haptic Touch ต้องการหยุดชั่วคราว 500 ms ซึ่งให้ความรู้สึกช้ากว่า อย่างไรก็ตาม Apple ชดเชยด้วยการตอบสนองแบบสัมผัสและภาพเคลื่อนไหว ผู้ใช้ที่เปลี่ยนจาก 3D Touch เป็น Haptic Touch มักสังเกตเห็นความแตกต่างของความเร็ว สำหรับนักพัฒนา การโยกย้ายนั้นโปร่งใส: UIContextMenuInteraction ทำงานเหมือนกันบนทั้งสองเทคโนโลยี
การดำเนินการด่วน (Quick Actions) — เมนูบริบทบนไอคอนแอปบนหน้าจอหลัก การกดแรง (3D Touch) หรือกดค้าง (Haptic Touch) บนไอคอนจะแสดงการดำเนินการด่วนสูงสุด 4 รายการ: "ข้อความใหม่" (Messages), "ถ่ายรูป" (Camera), "ค้นหา" (Safari) ดำเนินการผ่านคีย์ Info.plist UIApplicationShortcutItems หรือผ่านตัวแทน UIApplicationShortcutItem การดำเนินการด่วนพร้อมใช้งานบนอุปกรณ์ทั้งหมดที่มี iOS 13+ (Haptic Touch) หรือ 3D Touch
แทร็กแพดคีย์บอร์ด — การกดแรงบนแป้นพิมพ์ iOS จะสลับเป็นโหมดแทร็กแพด: แป้นพิมพ์จะไม่ทำงานและการเคลื่อนไหวของนิ้วจะเลื่อนเคอร์เซอร์ 3D Touch เปิดใช้งานแทร็กแพดโดยการกดแรงที่ใดก็ได้บนแป้นพิมพ์ Haptic Touch เปิดใช้งานแทร็กแพดโดยการกดแป้นเว้นวรรคค้าง โหมดแทร็กแพดกลายเป็นหนึ่งในการใช้งานยอดนิยมที่สุดของ 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 คือการจำลองทางซอฟต์แวร์ที่ใช้การกดค้างและการตอบสนองแบบสัมผัสจาก Taptic Engine 3D Touch เร็วกว่า (100 ms เทียบกับ 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 หรือกดค้าง) เอง ซึ่งโปร่งใสสำหรับโค้ดของคุณ: เมนูบริบทปรากฏบนทุกอุปกรณ์ที่มี iOS 13+ คุณไม่จำเป็นต้องเขียนตรรกะแยกสำหรับ 3D Touch และ Haptic Touch — ใช้ UIContextMenuConfiguration
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ