VoiceOver: ما هو، إيماءات التحكم والميزات على iOS

المؤلف: IT Sectr نُشر: 2026-05-15 وقت القراءة: 8 دق

VoiceOver هو قارئ شاشة مدمج من Apple يقوم بنطق كل عنصر في الواجهة ويسمح بالتحكم في الجهاز باستخدام الإيماءات. التكنولوجيا مدمجة في iOS وiPadOS وmacOS على مستوى النظام ولا تتطلب تثبيت برامج إضافية. وفقًا لـ Apple Accessibility (2025)، يدعم VoiceOver أكثر من 40 لغة ويستخدمه الملايين من المستخدمين المكفوفين وضعاف البصر حول العالم.

الوجبات الرئيسية

  • VoiceOver هو قارئ شاشة مدمج على iOS وiPadOS وmacOS، يتم التحكم فيه بالإيماءات والصوت
  • عجلة VoiceOver تغير أوضاع التنقل: كلمات، أحرف، عناوين، روابط
  • الإيماءات تشمل اللمس (النطق)، التمرير (التنقل) والنقر المزدوج (التفعيل)
  • المطورون يضبطون إمكانية الوصول عبر UIAccessibility وAccessibility Label
  • VoiceOver يتكامل مع النص الديناميكي وشاشات برايل

ما هو VoiceOver؟

VoiceOver هو قارئ شاشة مدمج في أنظمة تشغيل Apple. وهو مصمم للمستخدمين المكفوفين وضعاف البصر ويتيح التفاعل الكامل مع الجهاز دون اتصال بصري. يقوم VoiceOver بنطق جميع عناصر الواجهة: الأزرار، الروابط، النص، الصور، الإشعارات والعناصر النظامية.

تم تقديم التكنولوجيا لأول مرة في عام 2005 لنظام macOS، وظهرت على iOS مع iPhone 3GS في عام 2009. منذ ذلك الحين، أصبح VoiceOver جزءًا لا يتجزأ من نظام Apple البيئي وأحد الحجج الرئيسية لصالح إمكانية الوصول إلى المنصة. VoiceOver مدمج على مستوى النظام — مما يعني أنه يعمل في أي تطبيق دون تكامل إضافي من المطور، على الرغم من أن جودة النطق تعتمد بشكل مباشر على مدى جودة استخدام التطبيق لواجهة برمجة تطبيقات إمكانية الوصول لنظام iOS.

يدعم VoiceOver أكثر من 40 لغة مع تركيب صوت طبيعي ويتكيف مع إعدادات الصوت الإقليمية. على iOS، يستخدم VoiceOver محركات صوت Siri للعربية وعدد من اللغات الأخرى، مما يضمن الصوت الأكثر طبيعية والتنغيم الصحيح اعتمادًا على علامات الترقيم والسياق.

كيف يعمل VoiceOver؟

يعترض VoiceOver أحداث اللمس ويفسرها بشكل مختلف عن الإدخال القياسي لنظام iOS. عندما يلمس المستخدم الشاشة، لا يقوم VoiceOver بتنشيط العنصر تحت الإصبع، بل ينطقه أولاً. فقط بعد النقر المزدوج يتم تنشيط العنصر. هذا الاختلاف الرئيسي يسمح للمستخدمين المكفوفين باستكشاف الواجهة دون خطر النقرات العرضية.

ترتيب القراءة والتنقل

يقرأ VoiceOver عناصر الواجهة بترتيب منطقي: من اليسار إلى اليمين، ومن الأعلى إلى الأسفل. يتم توريث ترتيب القراءة من تسلسل العرض في iOS، ولكن يمكن للمطور تغييره من خلال خاصية accessibilityElements للتخطيطات المعقدة. يمكن للمستخدم التنقل بين العناصر عن طريق التمرير لليمين (التالي) ولليسار (السابق)، وكذلك لمس عنصر معين لنطقه.

مع كل حركة، ينطق VoiceOver نوع العنصر (زر، رابط، عنوان)، واسمه (accessibilityLabel)، وحالته (محدد، معطل) وتلميحه (accessibilityHint). إذا كان العنصر يحتوي على قيمة — على سبيل المثال، شريط تمرير الصوت — فإن VoiceOver ينطقها أيضًا. سمات إمكانية الوصول (UIAccessibilityTraits) تخبر المستخدم أيضًا عن سلوك العنصر: هل هو زر أم مفتاح تبديل أم حقل بحث أم مفتاح لوحة مفاتيح.

عجلة VoiceOver

العجلة هي قرص ضبط افتراضي يغير وضع التنقل في VoiceOver. يدور المستخدم العجلة بإصبعين (مثل مقبض الصوت) ويختار وضعًا: كلمات، أحرف، عناوين، روابط، نقاط دخول، صفوف جدول وغيرها. وضع العناوين يسمح بالتبديل السريع بين H1-H6 في صفحات الويب والتطبيقات، بينما وضع الأحرف ينطق النص حرفًا بحرف، وهو مفيد عند ملء النماذج أو إدخال رموز التحقق.

يمكن للمطور إضافة أوضاع مخصصة إلى العجلة من خلال واجهة برمجة تطبيقات UIAccessibilityCustomRotor. على سبيل المثال، في تطبيق الملاحظات، يمكن إضافة عجلة «الملاحظات المفضلة» أو «التغييرات الأخيرة». العجلات المخصصة تسرع التنقل بشكل كبير في التطبيقات المحددة وتعتبر أفضل ممارسة لإمكانية الوصول على iOS.

إيماءات التحكم في VoiceOver

يستخدم VoiceOver مجموعته الخاصة من الإيماءات التي لا تتطابق مع إيماءات iOS القياسية. يتم تنفيذ معظم الإيماءات بثلاثة أصابع بدلاً من واحدة — وهذا يمنع التعارض مع التشغيل العادي ويسمح لـ VoiceOver بالعمل بالتزامن مع الإدخال القياسي.

الإجراءالإيماءةالنتيجة
نطق العنصرلمسة بإصبع واحدينطق اسم العنصر
تفعيلنقر مزدوجالضغط على زر أو رابط
العنصر التاليتمرير لليمينالانتقال إلى التالي
العنصر السابقتمرير لليسارالعودة إلى السابق
التمريرتمرير بثلاثة أصابعتمرير القائمة أو الصفحة
العجلةدوران بإصبعينتغيير وضع التنقل

إيماءة النقر المزدوج هي الطريقة الرئيسية لتفعيل العناصر في VoiceOver. إذا كان العنصر يتطلب إجراءً خاصًا (على سبيل المثال، السحب)، يستخدم VoiceOver التسلسل «لمسة — نقر مزدوج واستمرار» للدخول إلى وضع الحركة. هذا يسمح بتنفيذ إيماءات معقدة مثل السحب والإفلات دون رؤية الشاشة. يدعم VoiceOver أيضًا إيماءة «النقر المزدوج بإصبعين» لإلغاء الإجراء و«النقر الثلاثي» لتشغيل/إيقاف ستارة الشاشة (Screen Curtain).

VoiceOver في تطوير التطبيقات

يمكن لمطور تطبيقات iOS تحسين التفاعل مع VoiceOver بشكل كبير من خلال واجهة برمجة تطبيقات UIAccessibility. تتم إضافة إعدادات إمكانية الوصول الأساسية في Interface Builder (Identity Inspector ← Accessibility)، لكن الواجهات المعقدة تتطلب تكوينًا برمجيًا في الكود.

تسمية إمكانية الوصول والسمات

خاصية accessibilityLabel تحدد النص الذي ينطقه VoiceOver للعنصر. إذا لم يتم تعيين تسمية، يستخدم VoiceOver نص الزر أو النص المكاني لحقل النص. للعناصر بدون نص (أيقونات، طرق عرض مخصصة)، التسمية إلزامية. خاصية accessibilityTraits تحدد نوع العنصر: زر، عنوان، مفتاح تبديل، حقل بحث، مفتاح لوحة مفاتيح، قيمة متغيرة، رابط وغيرها.

swift
let profileButton = UIButton(type: .custom)
profileButton.setImage(UIImage(named: "avatar"), for: .normal)
profileButton.isAccessibilityElement = true
profileButton.accessibilityLabel = "ملف المستخدم"
profileButton.accessibilityTraits = .button
profileButton.accessibilityHint = "يفتح شاشة إعدادات الملف الشخصي"

العلامة isAccessibilityElement تفعل دعم VoiceOver لطرق العرض المخصصة — افتراضيًا تكون صحيحة فقط للعناصر القياسية (UIButton وUILabel وUITextField). معامل accessibilityHint يضيف تلميحًا: ينطقه VoiceOver بعد توقف إذا توقف المستخدم على عنصر. يجب أن يصف التلميح نتيجة الإجراء، وليس التعليمات: «يفتح شاشة الإعدادات» بدلاً من «اضغط للفتح».

التجميع وترتيب العناصر

للشاشات المعقدة حيث لا تتطابق المجموعة المنطقية للعناصر مع الترتيب البصري، يتم استخدام accessibilityElements — مصفوفة تحدد ترتيب القراءة. على سبيل المثال، بطاقة المنتج تحتوي على صورة واسم وسعر وزر «أضف إلى السلة». إذا كانت هذه العناصر مرتبة بشكل عشوائي في تسلسل العرض، فإن accessibilityElements يحدد الترتيب الصحيح لـ VoiceOver.

swift
let productCard = UIView()
let productImage = UIImageView()
let productName = UILabel()
let productPrice = UILabel()
let addToCartButton = UIButton()

productCard.accessibilityElements = [
    productImage, productName, productPrice, addToCartButton
]

لدمج عناصر متعددة في عنصر واحد يمكن الوصول إليه، يتم استخدام UIAccessibilityContainer أو accessibilityFrame لتجاوز منطقة اللمس. هذا مفيد عندما تحتوي خلية جدول على عدة مكونات واجهة ولكنها تمثل منطقيًا عنصرًا واحدًا — يجب أن ينطق VoiceOver الخلية بأكملها ككل، وليس التنقل عبر محتوياتها بشكل فردي.

إعداد إمكانية الوصول لـ VoiceOver

يتطلب التكوين الصحيح لإمكانية الوصول لـ VoiceOver الانتباه إلى عدة جوانب: الترميز الدلالي، التحديثات الديناميكية، معالجة العناصر المخصصة والاختبار مع قارئ شاشة حقيقي.

الترميز الدلالي في SwiftUI

في SwiftUI، يتم تكوين إمكانية الوصول من خلال معدّلات .accessibilityLabel() و.accessibilityValue() و.accessibilityHint() و.accessibilityAddTraits(). يرث SwiftUI تلقائيًا إمكانية الوصول من العناصر القياسية، لكن المكونات المخصصة تتطلب تكوينًا صريحًا. على سبيل المثال، يجب أن يبلغ شريط التمرير المخصص VoiceOver بقيمته وتنسيق التغيير.

swift
Slider(value: $volume, in: 0...100)
    .accessibilityLabel("مستوى الصوت")
    .accessibilityValue(
        Text("\(Int(volume)) في المئة")
    )
    .accessibilityAddTraits(.adjustsAudioForAccessibility)
    .accessibilityAdjustableAction { direction in
        switch direction {
        case .increment: volume = min(volume + 5, 100)
        case .decrement: volume = max(volume - 5, 0)
        }
    }

معدّل accessibilityAdjustableAction يضيف القدرة على تغيير القيم بإيماءات VoiceOver: التمرير لأعلى للزيادة، التمرير لأسفل للتقليل. بدون هذا المعدّل، سيبقى شريط التمرير غير قابل للوصول للتحكم عبر قارئ الشاشة. تكوين مماثل مطلوب للمُدرجات المخصصة والمنتقيّات والعناصر الأخرى التي تغير قيمتها.

التحديثات الديناميكية والإشعارات

عندما يتغير المحتوى على الشاشة ديناميكيًا (يظهر إشعار، تتغير حالة التحميل، يتغير سعر)، يجب أن يتلقى VoiceOver إشعارًا عبر UIAccessibility.post. بدون هذا الاستدعاء، لن يعرف قارئ الشاشة عن التغييرات وسيفوت المستخدم معلومات مهمة. بالنسبة لـ SwiftUI، يتم استخدام معدّل .accessibilityAnnouncement().

swift
UIAccessibility.post(
    notification: .announcement,
    argument: "تم تخفيض السعر بنسبة 20 في المئة"
)

// SwiftUI
Text("تم تحديث السعر")
    .accessibilityAnnouncement(Text("خصم 20%"))

يجب استخدام إشعارات VoiceOver بشكل مدروس: الإعلانات المفرطة تزعج المستخدم، بينما غيابها يجعل التطبيق غير قابل للوصول. الاستراتيجية المثلى هي الإعلان فقط عن التغييرات التي تؤثر على سير العمل الحالي للمستخدم: تحديثات السلة، حالة التحميل، خطأ التحقق من صحة النموذج، إشعار الدردشة. التغييرات الخلفية (الوقت على اللوحة، أسعار العملات) لا تتطلب إعلانًا — سيتحقق منها المستخدم عند الحاجة.

يتم اختبار VoiceOver باستخدام جهاز فعلي مع تشغيل قارئ الشاشة أو محاكي iOS مع خيار مفتش إمكانية الوصول (Accessibility Inspector). من المهم اختبار سيناريوهات الاستخدام الكامل: إكمال التسجيل، تقديم طلب، العثور على منتج بالبحث دون تحكم بصري. إذا كان المسار قابلًا للتنقل دون ردود فعل بصرية — فإن VoiceOver مهيأ بشكل صحيح.

الأسئلة الشائعة

كيفية تشغيل VoiceOver على iPhone؟

الإعدادات ← إمكانية الوصول ← VoiceOver. قم بتشغيل المفتاح. للتفعيل السريع، استخدم النقر الثلاثي للزر الجانبي (على iPhone X والأحدث) أو زر الصفحة الرئيسية. يمكن Siri أيضًا تشغيل VoiceOver بأمر «شغّل VoiceOver».

ما الفرق بين VoiceOver وTalkBack؟

VoiceOver هو قارئ شاشة Apple لنظام iOS، وTalkBack هو قارئ شاشة Google لنظام Android. مبدأ العمل نفسه: اللمس ينطق، النقر المزدوج يفعل. الفرق في الإيماءات وإعدادات العجلة وتكاملات النظام البيئي: VoiceOver أكثر تكاملاً مع iCloud وApple Pay.

كيفية إعداد VoiceOver لتطبيقي؟

استخدم واجهة برمجة تطبيقات UIAccessibility: عيّن accessibilityLabel لجميع العناصر، وaccessibilityTraits لنوع العنصر وaccessibilityHint للتلميحات. في SwiftUI، استخدم معدّلات .accessibilityLabel() و.accessibilityAddTraits(). اختبر التطبيق مع تشغيل VoiceOver.

ما هي العجلة في VoiceOver؟

العجلة هي وضع تنقل يتم تغييره بتدوير إصبعين. تحدد كيفية التنقل بين العناصر: حسب العناوين أو الأحرف أو الكلمات أو الروابط أو نقاط الدخول. يمكن للمطورين إضافة أوضاعهم الخاصة من خلال UIAccessibilityCustomRotor.

لماذا لا يقرأ VoiceOver العنصر المخصص لدي؟

بالنسبة لـ UIView المخصص، يجب تعيين isAccessibilityElement = true وتوفير accessibilityLabel. إذا كان العنصر يتكون من عدة طرق عرض فرعية، استخدم accessibilityElements لتعيين ترتيب القراءة أو ادمجها في حاوية.

الخلاصة

  • VoiceOver هو قارئ شاشة مدمج من Apple لأجهزة iOS وiPadOS وmacOS مع تحكم صوتي بالإيماءات
  • العجلة تغير أوضاع التنقل: عناوين، أحرف، كلمات، روابط وأوضاع مخصصة
  • إيماءات VoiceOver: لمس — نطق، نقر مزدوج — تفعيل، تمرير — تنقل
  • التطوير عبر واجهة برمجة تطبيقات UIAccessibility: label، traits، hint، عجلة مخصصة وإشعارات ديناميكية
  • SwiftUI يوفر معدّلات .accessibilityLabel() و.accessibilityAddTraits() و.accessibilityAdjustableAction()
  • التحديثات الديناميكية تتطلب استدعاء UIAccessibility.post لإعلام VoiceOver
  • الاختبار إلزامي على جهاز حقيقي مع تشغيل VoiceOver دون تحكم بصري

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا