التدوير التلقائي لجهاز iPhone فقط على شاشات محددة ضمن وحدة التحكم في التنقل

StackOverflow https://stackoverflow.com/questions/1009915

سؤال

هذا مجرد مثال للمشكلة الأساسية التي أواجهها، لذا لا تقلق إذا كان هذا الموقف يبدو بلا جدوى بعض الشيء؛)

لنفترض أن لدي تطبيقًا يتكون أساسًا من UINavigationController بعمق مستويين فقط.المستوى الأعلى عبارة عن جدول يحتوي على قائمة بأسماء ملفات الصور، والمستوى الثاني يحتوي فقط على UIImageView يعرض الصورة لاسم الملف الذي قمت بالنقر فوقه.

بالنسبة لتطبيق مثل هذا، هل يعرف أي شخص طريقة جيدة للسماح للجدول الموجود في المستوى الأعلى بالتدوير التلقائي مع الحفاظ على المستوى الثاني من الصور ثابتًا في الوضع الرأسي؟

لقد تمكنت حتى الآن تقريبًا من الوصول إلى هناك ...ولكن عندما أقوم بالنقر فوق اسم ملف أثناء وجودي في الوضع الأفقي، تنزلق الصورة إلى العرض في الاتجاه الخاطئ حتى لو كان يجب على وحدة تحكم العرض في المستوى الثاني إرجاع نعم للأوضاع الرأسية فقط.

هل كانت مفيدة؟

المحلول

المشكلة هي أنه إذا كنت تستخدم التدوير التلقائي، فسيتم تدوير واجهة المستخدم بأكملها (بما في ذلك مثيل UIWindow على ما أعتقد).

أي شيء يتم دفعه إلى وحدة التحكم في التنقل في هذه المرحلة سيتم تنفيذه في الوضع الأفقي.

لذا، عندما تقوم بدفع عرض الصورة، فهذا هو بالضبط ما تحصل عليه.

لكي يعمل هذا، عليك إما:

  1. التعامل مع دوران عرض الجذر يدويًا (باستخدام تحويل)
  2. قم بإلغاء عرض عرض الصورة بواسطة -PI/2 باستخدام تحويل.

وفي كلتا الحالتين، يتعين عليك إجراء التحويلات يدويًا حتى يعمل هذا.

كملاحظة جانبية، قد يكون هذا تصميمًا سيئًا لواجهة المستخدم.كمستخدم، أتوقع أن تظهر الصور على الجانب الأيمن أثناء التنقل لأسفل.ولكن هذا دون معرفة السياق الدقيق لتطبيقك.

نصائح أخرى

لم تكن هناك طريقة جيدة للقيام بذلك في نظام التشغيل iPhone OS 2.x، ولكن في الإصدار 3.0، قاموا بتحسينه بشكل كبير.

في 2.x، shouldAutorotateToInterfaceOrientation: تم طاعة طريقة المندوب فقط ل التغييرات إلى الاتجاه، لذلك ستحصل على السلوك الذي تصفه:إذا تم تدويره في وحدة تحكم عرض أخرى، فسيظل مستديرًا من خلال الدفعات والملوثات العضوية الثابتة حتى لو لم تدعم وحدة التحكم في العرض الجديدة التدوير إلى هذا الاتجاه.

في الإصدار 3.0، استطلاعات UINavigationController shouldAutorotateToInterfaceOrientation: في كل دفعة أو فرقعة ويطيع ما يُرجعه بالطريقة التي تتوقعها، على سبيل المثال:إذا تم تدويرك حاليًا في الاتجاه الأفقي الأيسر، وقمت بدفع مثيل وحدة تحكم العرض التي تدعم الاتجاه العمودي فقط عبر shouldAutorotateToInterfaceOrientation:, ، فهو يقلب الاتجاه المنطقي تلقائيًا وعلى الفور وينزلق في العرض الجديد بالطريقة الصحيحة في الاتجاه الرأسي.

لاحظ أن هذا لن يعمل إلا على التطبيقات المرتبطة بالإصدار 3.0 (وبالتالي تتطلب ذلك).بالنسبة للتطبيقات المرتبطة بـ 2.x، فإنها ستحاكي السلوك القديم.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top