سؤال

لدي طريقة عرض (LSTabBarView) تدعم إدراج/حذف العناصر الجديدة بالطرق التالية:

- (void)insertItem:(LSTabItem *)item atIndex:(NSUInteger)index animated:(BOOL)animated; 
- (void)removeItemAtIndex:(NSUInteger)index animated:(BOOL)animated;

LSTabItem هو الكائن الذي يمثل فئة النموذج الخاص بي.في كل مرة تتم إضافة عنصر جديد باستخدام InsertItem:atIndex:animated:يتم إنشاء عرض فرعي جديد (LSTabControl) باستخدام المعلومات الموجودة داخل كائن النموذج هذا، ثم يتم إضافته إلى العرض الرئيسي، وأخيرًا يتم استدعاء LayoutSubviews لإعادة حساب إطار كل طرق عرض فرعية.

لقد قمت للتو بتنفيذ هذه العمليات ولكن المعلمة "المتحركة" غير مستخدمة في الوقت الحالي و كنت أتساءل أين يجب أن أضع الكود للتعامل مع الرسوم المتحركة عندما تكون الرسوم المتحركة هي نعم.

هذه هي الأساليب ذات الصلة:

- (void)insertItem:(LSTabItem *)item 
           atIndex:(NSUInteger)index 
          animated:(BOOL)animated 
{
    ...
    LSTabControl *tab = [self _configureNewTabControlForItem:item atIndex:index];
    [tabItems insertObject:item atIndex:index]; 
    [tabViews insertObject:tab atIndex:index]; // array which contains all the subviews

    [self setNeedsLayout];
}

- (void)removeItemAtIndex:(NSUInteger)index 
                 animated:(BOOL)animated 
{
    ...
    LSTabControl *tab = [tabViews objectAtIndex:index];
    ...
    [tab removeFromSuperview];

    [tabViews removeObjectAtIndex:index];
    [tabItems removeObjectAtIndex:index];

    [self setNeedsLayout];
}

ما تفعله LayoutSubviews هو في الأساس وضع كل طرق العرض الفرعية في تسلسل أفقي خطي واحدًا تلو الآخر مع تطبيق الحشو بين كل عرض فرعي.يمكن أن يكون لكل عرض فرعي عرض أو ارتفاع مختلف (ليس حجمهما ثابتًا).عند إضافة عنصر جديد مع تعيين الرسوم المتحركة على YES (لنفترض أنه عند الفهرس = 2) أريد أن يتم نقل كل طرق العرض الفرعية من الفهرس +1 إلى numberOfElements إلى اليمين ثم تظهر طريقة العرض الفرعية الجديدة في الفتحة المتاحة.

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

لا أريد أن أعرف كيفية تنفيذ الرسوم المتحركة (أعرف بالفعل كيفية القيام بذلك) ولكن ما هو النهج الصحيح لكيفية تحريك مظهر عرض فرعي جديد، مع الأخذ في الاعتبار متطلباتي الموضحة أعلاه.

هل يجب أن أفكر في تنفيذ جميع الرسوم المتحركة داخل LayoutSubviews أو وضع رمز الرسوم المتحركة داخل InsertItem/removeItem للسماح لـ LayoutSubviews فقط بحساب تخطيط طرق العرض الفرعية؟

شكرًا

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

المحلول

layoutSubviews من المفترض أن تكون طريقة سريعة بلقطة واحدة.من الأفضل استخدام الخاص بك insertItem: للرسوم المتحركة.

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