سؤال

وبينما UIScrollView (أو منها فئة مشتقة) هو التمرير، يبدو أن كل NSTimers التي تعمل بنظام التشغيل الحصول على توقف حتى يتم الانتهاء من التمرير.

هل هناك طريقة للالتفاف على هذا؟ الخيوط؟ A تحديد الأولويات؟ أي شيء؟

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

المحلول

وهناك حل سهل وبسيط لتنفيذ هو أن تفعل:

NSTimer *timer = [NSTimer timerWithTimeInterval:... 
                                         target:...
                                       selector:....
                                       userInfo:...
                                        repeats:...];
[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];

نصائح أخرى

لأي شخص باستخدام سويفت 3

timer = Timer.scheduledTimer(timeInterval: 0.1,
                            target: self,
                            selector: aSelector,
                            userInfo: nil,
                            repeats: true)


RunLoop.main.add(timer, forMode: RunLoopMode.commonModes)

نعم، بول هو الصحيح، وهذا هو إصدار شوط حلقة. على وجه التحديد، تحتاج إلى الاستفادة من طريقة NSRunLoop:

- (void)addTimer:(NSTimer *)aTimer forMode:(NSString *)mode

وهذه هي النسخة سريعة.

timer = NSTimer.scheduledTimerWithTimeInterval(0.01, target: self, selector: aSelector, userInfo: nil, repeats: true)
            NSRunLoop.mainRunLoop().addTimer(timer, forMode: NSRunLoopCommonModes)

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

وعلى أي شخص استخدام سويفت 4:

    timer = Timer(timeInterval: 1, target: self, selector: #selector(timerUpdated), userInfo: nil, repeats: true)
    RunLoop.main.add(timer, forMode: .common)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top