سؤال

مرحبًا ، لديّ uiscrollview ولدي كائن واحد من UiimageView داخل UisCrollView. أبدأ التطبيق. ثم أقوم بالتمرير إلى اليمين عند ScrollView وتغييرات ScrollView لكن لا يمكنني رؤية كائن UiimageView التالي الذي أضيفه في (void) ScrollViewDidendDecelerating: (UisCrollView *) ScrollView. قبل أن أضيف الكائن التالي أقوم بإزالة السابق ... ما هو الخطأ؟

لإزالة الكائن الذي أستخدمه

UIImageView *l;

    for (NSInteger ko=0; ko<[[scroll subviews] count]; ko++){
        if ([[[scroll subviews] objectAtIndex:0] isKindOfClass:[UIImageView class]]){

            //This code never gets hit
            l=[[scroll subviews] objectAtIndex:0];
            [l removeFromSuperview];
            l=nil;

        }
    }

ثم أضيف الكائن التالي

Scroll AddSubview: ImageView] ؛

أقوم بإزالة الكائن السابق لأن تطبيقي يتعطل عندما أقوم بإضافة 110 صورة في ScrollView لذلك يجب أن أدير الذاكرة التي أعتقدها. هذا هو السبب في أنني أزيل الكائن السابق.

أي شخص يساعد من فضلك!

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

المحلول

بضعة اقتراحات للحصول على المسار الصحيح:

  1. إذا كنت تعتقد أن الذاكرة مشكلة ، فقم بتقسيم المشكلة. على سبيل المثال إضافة/إزالة 10 صور في وقت واحد.

  2. خاصية علامة Uiview هي أفضل صديق لك عند محاولة تجنب الحفاظ على المشكلات مع الحلقات الخاصة بك. يمكنك تعيين علامة محددة لـ UiimageViews عند الحاجة إليها ، ثم البحث عن العلامة باستخدام [Uiview ViewWithTag: Tag] ؛ إنه يعمل بشكل متكرر.

  3. ST3FAN يظهر نقطة جيدة جدا حول التعديل المتزامن. بشكل عام ، هناك طريقة جيدة لتجنب ذلك هي إضافة إلى "صفيف الحذف" ثم removeObjectSinarray.

نصائح أخرى

المشكلة الأولى التي أراها هي أنك تحلق على صفيف أثناء تعديلها أيضًا. أيضا لديك ko لا يتم استخدام مؤشر الحلقة في أي مكان. أنت دائما الاستيلاء على البند 0.

ماذا عن:

NSArray* subviews = [[NSArray alloc] initWithArray: scroll.subviews];
for (UIView* view in subviews) {
    if ([view isKindOfClass:[UIImageView class]]) {
         [view removeFromSuperview];
    }
}
[subviews release];

أليس هذا بالضبط ما تحاول القيام به؟

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