פופאפ תגמול טקטילי: אנימציה, קונפטי ומונה נקודות
משתמש משלים משימה, מקבל 500 מטבעות—והאפליקציה מציגה AlertDialog משעמם עם "מזל טוב, +500". הרגע הולך לאיבוד. התגמול צריך להרגיש פיזי: חלקיקי קונפטי, מונה מואץ, משוב הפטי בשיא. בלי זה, גיימיפיקציה הופכת לפורמליות.
אנחנו מעצבים פופאפים של תגמול שהופכים אירוע טכני לרגש. הצוות שלנו סיפק מעל 50 פרויקטי גיימיפיקציה, מסטארטאפים ועד ארגונים (5+ שנים בגיימיפיקציה). המהנדסים המוסמכים שלנו משתמשים באנימציות native (SwiftUI/UIKit, Jetpack Compose), Core Haptics ו-CAEmitterLayer. הפופאפ מסתיים תוך 1.2–2 שניות—יותר מזה, ומשתמשים מתחילים ללחוץ על "סגור". בפרויקט פינטק אחד, החלפת Alert סטנדרטי בפופאפ תגמול עם מונה מונפש ומשוב הפטי הגדילה את ההמרה לפעולה חוזרת ב-27% תוך שבוע. החבילה הבסיסית שלנו מתחילה ב-$500, והחבילה המתקדמת עם אנליטיקה מלאה היא $1,200.
למה AlertDialog סטנדרטי לא מספיק
Alert הוא חלון מידע. פופאפ תגמול הוא מיקרו-סקריפט עם שיא, שחרור ומשוב. Alert לא תומך באנימציה מדורגת, חלקיקים או הפטיקה. חסר בו מונה שבונה תחושת הצטברות. ובכל זאת, הפרטים האלה מגדילים את ההמרה לפעולה חוזרת ב-20–30% (נתוני A/B test מהפרויקטים שלנו). מונה מונפש יעיל פי 3 בהעברת גודל התגמול מאשר טקסט סטטי.
אנטומיה של פופאפ תגמול
מבנה שכבות טיפוסי:
- רקע: רקע מעומעם עם טשטוש (UIBlurEffect / RenderEffect.createBlurEffect)
- כרטיס: מופיע מלמטה או גדל עם אנימציית קפיץ (אנחנו משתמשים ב-UISpringTimingParameters עם יחס damping של 0.6)
- אייקון תגמול: קנה מידה + סיבוב עם הקפצה
- התפרצות חלקיקים: קונפטי, כוכבים, מטבעות—CAEmitterLayer או Lottie
- חשיפת טקסט: מונה נקודות מונפש מהערך הקודם לחדש
- כפתור CTA: מופיע באיחור אחרי האנימציה הראשית
אלמנטים מרכזיים: רקע עם טשטוש, התפרצות חלקיקים עם קונפטי, והמונה המונפש. כל התהליך אורך 1.2–2 שניות. יותר מזה—המשתמש לוחץ על "סגור".
יישום מונה מונפש ב-iOS
האלמנט המפורט ביותר הוא המונה המונפש. +500 מטבעות צריך להיספר, לא רק להופיע.
class CountingLabel: UILabel {
func countFrom(_ start: Int, to end: Int, duration: TimeInterval) {
let displayLink = CADisplayLink(target: self, selector: #selector(update))
self.start = start
self.end = end
self.startTime = CACurrentMediaTime()
self.duration = duration
displayLink.add(to: .main, forMode: .common)
}
@objc func update(link: CADisplayLink) {
let elapsed = CACurrentMediaTime() - startTime
let progress = min(elapsed / duration, 1.0)
let eased = 1 - pow(1 - progress, 3) // ease-out cubic
currentValue = Int(Double(start) + Double(end - start) * eased)
text = "+\(currentValue)"
if progress >= 1 {
link.invalidate()
}
}
}ב-Flutter, השתמש ב-"Поздравляем, +500" עם class CountingLabel: UILabel { func countFrom(_ start: Int, to end: Int, duration: TimeInterval) { let displayLink = CADisplayLink(target: self, selector: #selector(update)) self.start = start; self.end = end self.startTime = CACurrentMediaTime() self.duration = duration displayLink.add(to: .main, forMode: .common) } @objc func update(link: CADisplayLink) { let elapsed = CACurrentMediaTime() - startTime let progress = min(elapsed / duration, 1.0) let eased = 1 - pow(1 - progress, 3) // ease-out cubic currentValue = Int(Double(start) + Double(end - start) * eased) text = "+\(currentValue)" if progress >= 1 { link.invalidate() } } } ו-emitterLayer.birthRate = 1 // включено DispatchQueue.main.asyncAfter(deadline: .now() + 0.15) { emitterLayer.birthRate = 0 // выключено — частицы летят до конца lifetime } בפנים.
התפרצות חלקיקים: CAEmitterLayer לעומת Lottie
CAEmitterLayer הוא פי 2–3 יותר ביצועי מ-Lottie לעיבוד חלקיקים אבל דורש יותר קוד. השוואה:
| פרמטר | CAEmitterLayer | Lottie |
|---|---|---|
| ביצועים | גבוהים (native) | בינוניים (עיבוד JSON) |
| גודל | ~50 KB | 200+ KB |
| גמישות | שליטה מלאה בחלקיקים | מוגבל לאנימציה |
| רוחב פלטפורמות | iOS בלבד | iOS, Android, Web |
להתפרצות אחת של קונפטי בהופעת הפופאפ, השתמש ב-CAEmitterLayer עם birthRate = 300 ל-0.1 השניות הראשונות, ואז birthRate = 0. זה נותן אפקט "פיצוץ" בלי זרם אינסופי.
emitterLayer.birthRate = 1 // включено
DispatchQueue.main.asyncAfter(deadline: .now() + 0.15) {
emitterLayer.birthRate = 0 // выключено — частицы летят до конца lifetime
}קונפטי של Lottie פשוט יותר: קובץ .json מוכן מופעל פעם אחת מעל הפופאפ. ראה תיעוד CAEmitterLayer לפרטים נוספים. לאפקטים טקטיליים, תיעוד Core Haptics מספק הנחיות.
אנימציה מדורגת: למה זה חשוב
הכל לא צריך להופיע בו-זמנית—דירוג יוצר תחושת "התגלגלות" של התגמול. לכל אלמנט יש את התזמון שלו:
| זמן | אירוע |
|---|---|
| 0ms | הרקע מופיע, הטשטוש מתחזק |
| 150ms | הכרטיס נכנס מלמטה (קפיץ) |
| 300ms | התפרצות חלקיקים |
| 350ms | האייקון גדל עם הקפצה |
| 500ms | משוב הפטי (הצלחה) |
| 600ms | טקסט התגמול נמוג פנימה |
| 800ms | המונה מתחיל לנוע |
| 1200ms | כפתור CTA מופיע |
ב-iOS, השתמש ב-DispatchQueue.main.asyncAfter לכל שלב או UIViewPropertyAnimator עם addAnimations(afterDelay:). ב-Flutter, השתמש ב-AnimationController עם עקומות interval לכל אלמנט.
קונפטי שלב-אחר-שלב עם CAEmitterLayer
- צור
CAEmitterLayerוהגדר אתframeשלו שווה לגבולות הפופאפ. - הגדר
emitterCells: הגדר תוכן (למשל, מלבן צבעוני),birthRate,lifetime,velocity,scale,spin. - הגדר
birthRate = 1ל-0.15 שניות, ואז אפס (כמו בקוד למעלה). - הוסף את השכבה כשכבת-בת לתצוגת הפופאפ.
- ודא שחלקיקים מעובדים לפני הסגירה (אורך חיים ~0.8 שניות).
צור קשר להערכה חינמית של הפרויקט שלך—ננתח את תרחיש התגמול שלך. הזמן פיתוח פופאפ תגמול turnkey (החל מ-$500) וקבל ייעוץ גיימיפיקציה.
מה כלול בעבודה שלנו
- ניתוח תרחיש משתמש ועיצוב פופאפ
- יישום ב-Swift (iOS) או Kotlin (Android) עם אנימציות native
- שילוב משוב הפטי (Core Haptics / Vibrator)
- שילוב אנליטיקה (Firebase / AppsFlyer)
- מסירת תיעוד וקוד מקור
- תמיכה ל-30 יום אחרי המסירה
אנחנו מבטיחים פעולה תקינה בכל המכשירים—נבדק על 20+ דגמים. ציר זמן: מיום אחד לפופאפ תגמול סטנדרטי עם אנימציות והפטיקה בפלטפורמה אחת.
סטטיסטיקות מרשימות: 5+ שנים בגיימיפיקציה, 50+ פרויקטים שנמסרו, מהנדסים מוסמכים. חסוך עד $2,000 בהשוואה לבנייה מחדש פנימית.







