UIScrollView مؤقتا NSTimer حتى انتهاء التمرير
-
03-07-2019 - |
سؤال
وبينما 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)