مقياس صورة لتناسب الشاشة على دوران iPhone
-
26-09-2019 - |
سؤال
لديّ 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;