كيف تنشئ مؤقت باستخدام Timer و Swift 3

Ammar AlTahhanمنذ 6 سنوات

بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله وبركاته

 

في البداية ماهو Timer؟

"هو كلاس مؤقت يقوم باطلاق تنبيه بعد أن فترة زمنية يحددها المستخدم، ليرسل رسالة محددة الى Object معين"

 

في هذا الموضوع سنتعلم كيفية انشاء تطبيق مؤقت بسيط باستخدام كلاس Timer 

- قم بانشاء مشروع جديد على الxCode من نوع Single View Application

Timer1.png.e02dac919945327a49790effee67c5ec.png

 

- سم البروجكت كما تحب وتأكد من اختيار Swift كلغة المشروع

Timer2.png.faa792847655c3799f3dbcffe296cf8a.png

 

- اضف UILabel و UIButton ثلاث مرات بالتصميم المناسب لك، قمت انا بتصميم الواجهة كالتالي

59bd85ef9c6f9_ScreenShot2017-09-16at10_34_26PM.thumb.png.b5c4a946edd74773a347a1c55fa9afa8.png

 

- الآن اضف الOutlets والActions والFunctions والVariables كالتالي

59bd85f45840d_ScreenShot2017-09-16at10_41_19PM.thumb.png.454d0aa3fc46032e3580783f0ce2d33c.png

(قمنا بتعريف variable من كلاس Timer في الاعلى لنستطيع الوصول اليه من كل الميثودز)

 

- اضف الكود التالي لميثودي updateTimer() و startBtnTapped() 


@IBAction func startBtnTapped(_ sender: Any) {
    timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(updateTimer), userInfo: nil, repeats: true)
}

func updateTimer() {
    intCounter += 1
        
    //Set counter in UILabel
    timeLbl.text! = String(format: "%02d:%02d:%02d", intCounter / 3600, (intCounter % 3600) / 60, (intCounter % 3600) % 60)
}

في الكود السابق قمنا باستدعاء الميثود scheduleTimer التي ستقوم بانشاء لوب يتكرر بحسب الوقت الذي نحدده ليقوم بالأكشن الذي نحدده أيضا 

  • timeInterval: هو الوقت الذي نريد انتظاره قبل تكرار الأكشن مرة أخرى، قمنا بتحديده 1 لتتكرر الميثود ()updateCounter كل ثانية
  • target: هو self حيث قمنا باختيار الView controller الحالية ViewController.swift
  • selector: هو الأكشن الذي سنقوم به بعد كل timeInterval
  • userinfo: اذا اردت ارسال أي data الى الميثود المستدعاة يمكنك ارسالها من هنا، لكنا قمنا بوضعها nil حاليا
  • repeats: هل تريد تكرار الأكشن كل timeInterval أم اطلاق الأكشن مرة واحدة فقط؟ (في حالة اختيار repeats: true سيقوم الtimer بتكرار تطبيق الأكشن كل timeInterval الى مالا نهاية، أو إلى أن نوقفه يدويا)

في الميثود ()updateTimer قمنا بزيادة الكاونتر قيمة 1، ثم قمنا بحساب عدد الساعات والدقائق والثواني التي لعرضها في الtimeLbl

 

- قم باضافة الكود التالي لبقية ميثودز الأكشن:


@IBAction func stopBtnTapped(_ sender: Any) {
    //Invalidate timer
    timer.invalidate()
}
    
@IBAction func resetBtnTapped(_ sender: Any) {
    intCounter = 0
    stopBtnTapped(sender)
    timeLbl.text = "00:00:00"
}

في الميثود الأولى:

()invalidate: تستعمل لايقاف الtimer (في حالة قمت باختيار repeats: true)

في الميثود الثانية:

قمنا باعادة ضبط الكاونتر وايقاف المؤقت تماما، واعادة ضبط الtimeLbl

 

- أخيرا أضفت بعد الأكواد لايقاف الأزرار عن العمل عند الضغط عليها (لكي لا يضغط المستخدم على زر Start مرتين متتاليتين)

59bd85fb1004a_ScreenShot2017-09-16at11_10_43PM.thumb.png.53ce37c8b70acced106465a944ddd2e6.png

 

النتيجة النهائية للمشروع:

Webp.net-gifmaker.thumb.gif.3c0793baaaf266b16d051ca595734992.gif

 

الى هنا نصل الى ختام موضوعنا

استودعكم الله الذي لا تضيع ودائعه

كلمات دليلية:
0
إعجاب
3220
مشاهدات
0
مشاركة
0
متابع
متميز
محتوى رهيب

التعليقات (0)

لايوجد لديك حساب في عالم البرمجة؟

تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !