3D Touch — فناوری سختافزاری اپل که نیروی فشار روی نمایشگر iPhone را تشخیص میدهد، و جایگزین نرمافزاری آن Haptic Touch که بر اساس مدت زمان لمس کار میکند. 3D Touch از حسگرهای فشار کالیبرهشده نصبشده در زیر ماتریس صفحهنمایش (Force Touch) استفاده میکند و امکان تشخیص فشار سبک (peek) از فشار عمیق (pop) را فراهم میکند. از iOS 13 به بعد، اپل 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 میلیثانیه) برای فعالسازی همان اقدامات استفاده میکند. بازخورد لمسی (haptic feedback) حس "کلیک" را شبیهسازی میکند، اگرچه هیچ فشار فیزیکی رخ نمیدهد. اپل به دلیل پیچیدگی و هزینه بالای تولید نمایشگرهای 3D Touch، به ویژه در گذار به پنلهای OLED با Face ID، به Haptic Touch روی آورد.
پیشینه تاریخی: 3D Touch در iPhone 6S ظاهر شد و تا iPhone XS (2018) حفظ شد. iPhone XR (2018) اولین دستگاهی بود که به جای 3D Touch از Haptic 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 — فناوری اندازهگیری نیروی فشار مورد استفاده اپل در 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 — الگوی اصلی 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): اپل Peek and Pop را با منوهای متنی از طریق UIContextMenuInteraction جایگزین کرد. API جدید سادهتر است: به UIViewControllerPreviewingDelegate نیاز ندارد، از منوهای سلسلهمراتبی (submenus)، آیکونهای SF Symbols پشتیبانی میکند و با 3D Touch و Haptic Touch یکسان کار میکند. مهاجرت: registerForPreviewing از iOS 13 منسوخ شده است. آن را با UIContextMenuConfiguration جایگزین کنید که به طور خودکار با قابلیتهای دستگاه سازگار میشود.
UIContextMenuInteraction — API مدرن iOS برای منوهای متنی که از iOS 13 در دسترس است. از طریق addInteraction(_:) به هر UIView اضافه میشود. دلیگیت 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 میلیثانیه) | با تأخیر (~500 میلیثانیه) |
| سطوح فشار | 2 (peek + pop) | 1 (منوی متنی) |
| بازخورد لمسی | Taptic Engine (شبیهسازی کلیک) | Taptic Engine (شبیهسازی کلیک) |
| App Store | Quick Actions روی آیکون | Quick Actions روی آیکون |
| کالیبراسیون | تنظیم خودکار با نیروی کاربر | نیاز نیست |
| قابلیت تعمیر | پیچیده (حسگرها در نمایشگر) | استاندارد |
تأثیر بر UX: سرعت 3D Touch بیشتر است — کاربر بلافاصله با فشار قوی منوی متنی را دریافت میکند. Haptic Touch به مکث 500 میلیثانیه نیاز دارد که کندتر احساس میشود. با این حال اپل این را با بازخورد لمسی و انیمیشن بصری جبران میکند. کاربرانی که از 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 میلیثانیه در مقابل 500 میلیثانیه) و دو سطح نیرو را پشتیبانی میکند (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های قدیمی).
اپل 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 از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.