سؤال

لدي Uilabel يعرض التاريخ الحالي للعرض الحالي لعرض التمرير الخاص بي. عندما أتجاوز هذا الرأي إلى اليسار (إلى الصفحات اليسرى)، أود تغيير هذه الملصق إلى اليوم السابق، مع تأثير عبور بين التواريخ 2.

أخذ كمرجع تأثير تلاشى اللوح عند التمرير إلى صفحة الأضواء. أعتقد أن هذا مشابه ولكن ليس لدي أي فكرة عن كيفية تنفيذها!

أين أضع الكود، هل يجب علي استخدام 2 Uilabel مختلفة أو ربما CorreAnimation؟ متى أقوم بتغيير التاريخ؟

شكرا مقدما !

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

المحلول

  1. في الخاص بك scrollViewDidScroll: طريقة المندوب، تحقق مما إذا كان عرض التمرير contentOffset يشير إلى أن المستخدم قد تم تمريره إلى صفحة أخرى.
  2. إذا كان الأمر كذلك، قم بتغيير نص الملصقات إلى التاريخ الجديد. لن تحريك حتى الآن، ولكن قم بذلك قبل أن تجرب الرسوم المتحركة.
  3. للرسوم المتحركة، أضف أ CATransition إلى طبقة التسمية وتكوينها حسب رغبتك:

    // Create a transition animation and add it to the label's layer:
    CATransition *transition = [CATransition animation];
    transition.type = kCATransitionFade;
    transition.duration = 0.25;
    [self.dateLabel.layer addAnimation:transition forKey:@"textTransition"];
    // Change the label's text as before:
    self.dateLabel.text = newDateString;
    

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

نصائح أخرى

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

- (void)crossfadeDateLabels
{
    date1Label.layer.opacity = 0.0f;
    date2Label.layer.opacity = 1.0f;
}

أو يمكنك استخدام نموذج الرسوم المتحركة الصريح إذا كنت تريد المزيد من التحكم:

- (void)crossfadeDateLabels
{
    CABasicAnimation *date1Anim = [CABasicAnimation animationWithKeyPath:@"opacity"];
    date1Anim.duration = 1.0f;
    date1Anim.fromValue = [NSNumber numberWithFloat:1.0f];
    date1Anim.toValue = [NSNumber numberWithFloat:0.0f]

    // Do something similar for date2Anim...

    [date1Label.layer addAnimation:date1Anim forKey:nil];
    [date2Label.layer addAnimation:date2Anim forkey:nil];
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top