كيف تنشئ مؤقت باستخدام Timer و Swift 3
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
في البداية ماهو Timer؟
"هو كلاس مؤقت يقوم باطلاق تنبيه بعد أن فترة زمنية يحددها المستخدم، ليرسل رسالة محددة الى Object معين"
في هذا الموضوع سنتعلم كيفية انشاء تطبيق مؤقت بسيط باستخدام كلاس Timer
- قم بانشاء مشروع جديد على الxCode من نوع Single View Application
- سم البروجكت كما تحب وتأكد من اختيار Swift كلغة المشروع
- اضف UILabel و UIButton ثلاث مرات بالتصميم المناسب لك، قمت انا بتصميم الواجهة كالتالي
- الآن اضف الOutlets والActions والFunctions والVariables كالتالي
(قمنا بتعريف 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 مرتين متتاليتين)
النتيجة النهائية للمشروع:
الى هنا نصل الى ختام موضوعنا
استودعكم الله الذي لا تضيع ودائعه
التعليقات (0)
عرض المزيد.. جديد مقالاتي
لايوجد لديك حساب في عالم البرمجة؟
تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !