سؤال

أقوم بإعداد UISLIDER بسيط لتحريك تقدمه:

[UIView animateWithDuration:songLength
         delay:0.0
       options:UIViewAnimationOptionRepeat|
         UIViewAnimationOptionAllowUserInteraction|
         UIViewAnimationOptionBeginFromCurrentState
       animations:^{
        [UIView setAnimationDuration:10.0];
        [myUISlider setValue:10.0];
       } completion:nil
   ];

  [UIView commitAnimations];

عندما يضغط المستخدم على زر أريد إيقاف الرسوم المتحركة في مكانها.

أنا أفهم أنني بحاجة إلى الاستعلام عن طبقة العرض التقديمي لمعرفة القيمة ، ومع ذلك ، فإن طبقة العرض التقديمي من نوع Calayer وليس Uislider. وبالتالي ، فإنه يحتوي على خصائص طبقة ، مثل موضع x/y على الشاشة ، ولكن ليس قيمة شريط التمرير نفسه.

من المنطقي أنه من خلال تصميم طبقة العرض يمكن أن تصل إلى جميع البيانات المتحركة الحالية للطبقة ، لكنني لست متأكدًا من كيفية العمل في الكود.

أيه أفكار؟

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

المحلول

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

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

هنا هو الرمز:

updateTimer = [NSTimer scheduledTimerWithTimeInterval:.01 target:self selector:@selector(updateCurrentTime) userInfo:p repeats:YES];

لذلك كل .01 من ثانية تسمى هذه الطريقة وإعادة رسم الإبهام ، وبالتالي خلق الرسوم المتحركة. لا حاجة إلى كتلة الرسوم المتحركة.

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

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