سؤال

لديّ uiscrollview يحتوي على uiimageView ولدي بعض المتاعب للحصول على السلوك الصحيح عندما يدور iPhone.

هدف: أحاول الحصول على ما يلي عند الانتقال من صورة إلى المناظر الطبيعية:

_________
|AAAAAAA|
|BBBBBBB|         _________________
|CCCCCCC|         |     AAAAAA     |
|DDDDDDD|    -->  |     CCCCCC     |
|EEEEEEE|         |     EEEEEE     |
|FFFFFFF|         |_____GGGGGG_____|
|GGGGGGG|
---------

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

حاليا لدي ما يلي autoresizingMask على Scrollview:

 scrollView.autoresizingMask =(UIViewAutoresizingFlexibleWidth |
                               UIViewAutoresizingFlexibleHeight);       

لكن هذا يعطي ما يلي

_________
|AAAAAAA|
|BBBBBBB|         _________________
|CCCCCCC|         |AAAAAA          |
|DDDDDDD|    -->  [BBBBBB          |
|EEEEEEE|         [CCCCCC          |
|FFFFFFF|         [DDDDDD__________|
|GGGGGGG|
---------

هذا الإعداد يحافظ على مقياس وإزاحة من الزاوية اليسرى العلوية.

سؤال:هل من الممكن الحصول على هذا السلوك باستخدام مناسب autoresizingMask؟ إذا لم يكن الأمر كذلك ، فربما ينبغي للمرء تعيين

 scrollView.autoresizingMask = UIViewAutoresizingNone;

وضبط يدويًا zoomScale و contentOffset ل uiscrollview على الدوران. ولكن ، أين يجب أن يتم ذلك؟ ماذا عن تحريك هذا التغيير؟

المحلول:عن طريق تعديل الإجابة أدناه قليلاً ، حصلت على السلوك أعلاه باستخدام الكود أدناه:

imageView.autoresizingMask = (UIViewAutoresizingFlexibleWidth |
                                     UIViewAutoresizingFlexibleHeight);

scrollView.autoresizingMask =(UIViewAutoresizingFlexibleWidth 
                                     | UIViewAutoresizingFlexibleHeight);

imageView.contentMode = UIViewContentModeScaleAspectFit;
scrollView.contentMode = UIViewContentModeCenter;
هل كانت مفيدة؟

المحلول

جرب هذا:

scrollView.autoresizingMask = (UIViewAutoresizingFlexibleWidth |
                           UIViewAutoresizingFlexibleHeight);    
imageView.autoresizingMask = (UIViewAutoresizingFlexibleWidth |
                           UIViewAutoresizingFlexibleHeight);

imageView.contentMode = UIViewContentModeAspectFit; // You could also try UIViewContentModeCenter

لست متأكدًا مما إذا كان سيتم تغيير حجم ImageView تلقائيًا في عرض UIScrollView ، لذلك إذا لم ينجح حجم التلقائي ، فيمكنك محاولة ضبط الإطار بنفسك على مساواة حجم ScrollView.

نصائح أخرى

كان لدي موقف مماثل ، عرض بسيط للغاية مع 3 ImageViews ("السابق" ، "الحالي" ، و "التالي") لعرض سلسلة من الصور.

كانت جميع الصور بحجم جهاز iPad ، ولكن مزيج من التوجهات الطبيعية والتوجهات. أردت منهم أن يتناسبوا مع الشاشة ، (أي letterboxed إذا لزم الأمر) ، مع الاحتفاظ بنسبة العرض إلى الارتفاع. لقد وجدت أنني بحاجة فقط للقيام بذلك إلى 3 ImageViews حتى تعمل:

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