سؤال

أنا أقوم بإنشاء تطبيق لجهاز iPad الذي يستخدم واجهة برمجة تطبيقات YouTube للحصول على صورة مصغرة للفيديو وتقديمها في معرض (مثل تطبيق YouTube الأصلي على iPad). في الأساس ، إنها مجرد حفنة من LiimageViews على UisCrollView. الآن المشكلة هي أن عرض جميع الصور في وقت واحد قد يتسبب في تعطل التطبيق بسبب مشاكل في الذاكرة ، وبالتالي فإن الفكرة هي الحفاظ على الصور التي يمكن أن تراها فقط ، وكتابة الآخرين إلى الملفات.

مشكلتي هي كيفية الحصول على حدود المنطقة "المرئية" الدقيقة لمحتوى UisCrollView.

أيه أفكار؟

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

المحلول

هل ألقيت نظرة على Aqgridview؟ إنه مصمم على وجه التحديد هذا النوع من الأشياء.

نصائح أخرى

شاهد WWDC 2010 الجلسة 104 - تصميم التطبيقات مع طرق عرض التمرير.

عندما يتم تمرير UisCrollView ، يجب عليك التحقق من إزاحة المحتوى (ScrollView.contentOffset) والحصول على (على سبيل المثال) قيمة X. مع ذلك (واعتمادًا على قيمة إطار العرض لـ UIScrollView) ، يجب أن تكون قادرًا على معرفة ما يحصل عليه المستخدم. حاول طباعة هذه المعلومات باستخدام nslog ؛-)

ثم عندما تعرف أي "الصفحة" التي يحصل عليها المستخدم ، يمكنك تحميل بعض uiimageview.

حظا طيبا وفقك الله :-)

في layoutSubviews يمكنك الحصول على الحدود المرئية حاليًا مثل هذا:

CGRect visibleBounds = [self bounds];

يمكنك بعد ذلك التحقق مما إذا كان UiView (على سبيل المثال UiimageView) مرئيًا من خلال مقارنة إطاره باستخدام PisibleBounds:

BOOL visible = CGRectIntersectsRect(visibleBounds,cellFrame);

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

يجب عليك أيضًا إعادة استخدام Uiviews بدلاً من إنشاء مجموعات جديدة طوال الوقت. ما عليك سوى القائمة الانتخابية التي تمت إزالتها في NSSEST وتحقق من ذلك قبل إنشاء منها جديد.

هذا نهج مختلف:

استخدم UitableView ولكن اضبط الخصائص بحيث يبدو وكأنه طريقة عرض التمرير العادية. (في الأساس ، قم بتضمين العديد من الصور المصغرة على كل صف ، وإزالة فاصل الصف.)

عندما تتحرك الصفوف من الشاشة ، سيتم إعادة تدوير المشاهدات ويمكن استرداد الذاكرة المستخدمة من قبل UIImageViews.

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

لاحظ أن هذا يعمل فقط إذا كنت طاولة فقط تمرير رأسياً. على حد علمي ، لا يمكنك الحصول على التمرير أفقيا uitableview.

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