باستخدام mpmusicplayercontroller ، قم بتعيين musicplayer.currentPlayBackTime للبحث ولكنه يأخذ المركز الثاني ليحصل على ساري المفعول

StackOverflow https://stackoverflow.com/questions/2379165

سؤال

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

- (void) _seekTo:(double)playbackTime {
     mPlayer.currentPlaybackTime = playbackTime;
}

هذا يعمل بشكل جيد ، الموسيقى تسعى إلى الأمام. عند إصدار الإبهام ، أقوم بإعادة تشغيل Nstimer لإرسال تحديثات الوقت للحفاظ على Uislider متزامنًا. المشكلة هي ، عند إصدار الإبهام ، تحتوي ظهور المكالمات القليلة الأولى على القيمة الزمنية السابقة. هذا يتسبب في العودة إلى موقعه الأصلي قبل العودة إلى القيمة الجديدة. قبيح جدا.

أي شخص لديه أي خبرة مع هذا السلوك وطريقة لتصحيح؟ يمكنني توفير عينة من مشروع إذا كنت ترغب في ذلك يوضح هذا الشذوذ.

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

المحلول

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

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

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