تنقسم عملية الانتقال إلى مراحل متعددة. يتم إرسال دلتا الإدخال من خلال سلسلة من المراحل لضمان حصول كل مرحلة على فرصة لاستخدام الحركة أو التفاعل معها.
خلال هذه الدورة، يتم تمرير كل من دلتا الإدخال المتاحة ودلتا الإدخال المستهلكة في كل خطوة. يوفّر ذلك لكل مرحلة السياق الكامل اللازم للتفاعل مع حدث الانتقال أو استخدامه أو الاستماع إليه.
كما هو موضّح في الشكل 1، تتبع عملية الانتقال هذا الترتيب الدقيق:
- تجاوز حد التمرير: يتلقّى هذا الإجراء الفرق الأولي في الإدخال أولاً، ما يمنحه فرصة للتفاعل أولاً (على سبيل المثال، من خلال تخفيف تأثير التمدّد النشط).
- التمرير المسبق للتمرير المُدمَج: يتيح التفاعل مع دلتا الإدخال قبل مرحلة التمرير. في هذه المرحلة، قد يتم استهلاك بعض التغييرات في الإدخال، أو قد تتم مراقبتها فقط لتشغيل تغييرات واجهة المستخدم، مثل تصغير شريط التطبيق أو توسيعه.
- تحويل دلتا الإدخال: يتم تعديل علامة دلتا الإدخال الأوّلية استنادًا إلى اتجاه التنسيق لضمان سلوك التمرير الطبيعي. لمزيد من المعلومات، يُرجى الاطّلاع على قسم تحويل دلتا الإدخال.
- التمرير: تتلقّى هذه المرحلة الفرق المتاح وغير المستخدَم في الإدخال بعد تعديله ليتطابق مع إعدادات حاوية التمرير. ويستخدم عادةً هذا الفرق لتعديل إزاحة الانتقال الخاصة به.
- العودة إلى دلتا الإدخال الأوّلي: يؤدي هذا الخيار إلى إعادة دلتا المتاحة والمستهلكة من مرحلة التمرير إلى علامة دلتا الإدخال الأوّلي الأصلية.
- مرحلة ما بعد الانتقال في الانتقال المتداخل: تتفاعل هذه المرحلة بعد اكتمال مرحلة الانتقال الرئيسية، وتتلقّى الفروق المتاحة والمستهلكة التي تم تعديلها حديثًا. ويمكنه استخدام أي مدخلات متبقية متاحة، أو استخدام سياق ما تم استخدامه للتو.
- تجاوز حد التمرير: تبحث هذه المرحلة الأخيرة في الفروق النهائية المتاحة والمستهلكة. يتم عادةً استخدام أي إدخال متاح متبقٍ يصل إلى هذه المرحلة لتشغيل تأثيرات الحواف، مثل التمديد أو التوهج، مما يشير إلى أن المستخدم قد وصل إلى حدود المنطقة القابلة للتمرير.
تحويل دلتا الإدخال
يتطلب الفرق في إدخال المؤشر تعديلات على الإشارات عبر مراحل التمرير لمطابقة العقود المتوقعة. قبل أن يصل الفرق إلى مرحلة التمرير، تعدّل معدِّلات التمرير فرق الإدخال استنادًا إلى الاتجاه واتجاه التنسيق وسياقات الكتابة من اليمين إلى اليسار. يحدث ذلك لأنّ الإدخال الأولي يتتبّع حركة المؤشر على الشاشة بالبكسل (على سبيل المثال، يؤدي التحرك للأسفل إلى زيادة الإحداثي Y على الشاشة، ما ينتج عنه قيمة موجبة). ومع ذلك، لتحقيق "التمرير الطبيعي" حيث يتحرك المحتوى مع إصبعك، فإن السحب لأسفل يعني أن إطار العرض يجب أن يتحرك لأعلى فوق المحتوى، وهو ما يتوافق مع إزاحة تمرير سالبة.
لا يتم تحويل فروق الإدخال من مصادر الإدخال الأخرى، مثل عجلة الماوس أو لوحة اللمس، خلال مراحل الانتقال.
مثال: يتحرّك المؤشر إلى اليمين باستخدام Modifier.horizontalScroll()
لفهم كيفية استخدام الاختلافات وتحويلها، راجِع الشكل 2 الذي يوضّح إيماءة يتحرّك فيها المؤشر إلى اليمين.
- ما قبل الانتقال: تبدأ الإيماءة بفرق إدخال أولي إيجابي يبلغ 100.
- يلاحظ تجاوز حد التمرير ذلك ويستهلك 10، ما يترك 90.
- يمنح التمرير المسبق للتمرير المضمّن المكوّن الرئيسي فرصة للتفاعل، ويستهلك 30. ويكون الفرق الأولي المتبقي هو 60.
- التحويل "أ": قبل الدخول في مرحلة التمرير،
يقلب
horizontalScrollالفرق الموجب المتبقي (60) إلى فرق سالب (-60). يضمن ذلك إزاحة إطار العرض إلى اليسار بحيث يبدو المحتوى يتحرك إلى اليمين بإصبع المستخدم. - التمرير: يستهلك المكوّن المستهدَف القابل للتمرير جزءًا من هذا التغيير المحوَّل لتعديل إزاحة التمرير. في هذا المثال، يستهلك -30، ما يترك -30 غير مستهلَك.
- التحويل "ب": يتم تحويل قيمة التمرير المتبقية (-30) إلى قيمة أولية موجبة (30) لتتوافق مع عقد التمرير المُدمَج وتجاوز حد التمرير.
- بعد الانتقال: يتم تمرير الفرق الأولي المتبقي إلى أعلى المسار.
- يستهلك التمرير المتداخل بعد التمرير 10، ويتبقى 20.
- يستخدم تأثير تجاوز حد التمرير آخر 20 لإنشاء تأثيرات مرئية على الحواف، مثل التمدد أو التوهج، ما يؤدي إلى حلّ الفرق في الإدخال بالكامل إلى 0.
مرجع تحويل دلتا لإدخال المؤشر
يوضّح الجدول التالي كيفية توقيع فروق الإدخال في مراحل واتجاهات مختلفة لإدخال المؤشر.
| الفرق في البيانات الأولية التي تم إدخالها | تأثير تجاوز حد التمرير | التمرير المتداخل | scrollableArea باتجاه أفقي |
scrollableArea باتجاه أفقي (معكوس) |
scrollableArea باتجاه عمودي |
scrollableArea باتجاه عمودي (معكوس) |
|
|---|---|---|---|---|---|---|---|
| يتحرّك المؤشر للأعلى | سلبية | سلبية | سلبية | لا ينطبق | لا ينطبق | إيجابية | سلبية |
| يتحرّك المؤشر للأسفل | إيجابية | إيجابية | إيجابية | لا ينطبق | لا ينطبق | سلبية | إيجابية |
| يتحرّك المؤشر إلى اليسار | سلبية | سلبية | سلبية | موجب (سالب للغات التي تُكتب من اليمين إلى اليسار) | سالب (موجب للغات التي تُكتب من اليمين إلى اليسار) | لا ينطبق | لا ينطبق |
| يتحرّك المؤشر إلى اليمين | إيجابية | إيجابية | إيجابية | سالب (موجب للغات التي تُكتب من اليمين إلى اليسار) | موجب (سالب للغات التي تُكتب من اليمين إلى اليسار) | لا ينطبق | لا ينطبق |