Long Press — uzun basma jesti, bu zaman barmaq ekranda müəyyən müddət (adətən 0,5–1 saniyə) hərəkət etmədən saxlanılır. Tap-dan fərqli olaraq, Long Press toxunma anında deyil, gecikmə taymeri bitdikdən sonra tanınır. Jest kontekst menyusu çağırmaq, önbaxış, bir neçə obyekti seçmək və əlavə hərəkətləri aktivləşdirmək üçün istifadə olunur. iOS-da UILongPressGestureRecognizer, Android-də isə setOnLongClickListener və ya GestureDetector vasitəsilə reallaşdırılır.
Əsas məqamlar
Long Press (uzun basma, uzun toxunma) — multitouch interfeysinin jesti, bu zaman istifadəçi ekrana toxunur və barmağını müəyyən müddət hərəkətsiz saxlayır. Sistem dərhal reaksiya vermir: o, taym-autu (adətən 500 ms) gözləyir və yalnız onun bitməsindən sonra jesti Long Press kimi tanıyır. Barmaq daha tez buraxılarsa — jest adi Tap kimi şərh olunur.
Jest müasir mobil interfeyslərin fundamental tikinti blokudur. Apple onu tətbiqlərdə (Messages, Safari, Files) kontekst menyularının çağırılması üçün istifadə edir. Google Long Press-i mətn seçmə sistemində, iş masasında ikonların daşınmasında və Android-də kontekst menyularının çağırılmasında tətbiq etmişdir. Veb-interfeyslərdə uzun basma çox vaxt fiziki sağ düyməsi olmayan mobil cihazlarda siçanın sağ klikini əvəz edir.
Tarixən Long Press sensor ekranlar üçün kontekst menyusuna (sağ klik) alternativ olaraq yaranmışdır. İlk tətbiqlər rezistiv ekranlı cihazlarda (Palm, 2000-ci illərin əvvəllərində Windows Mobile) rast gəlinir, lakin jest yalnız iPhone və Android-in meydana çıxması ilə standartlaşdırılmışdır. Hər iki platformanın Human Interface Guidelines qaydaları Long Press-i ikinci dərəcəli hərəkət kimi təsvir edir — Tap-ı əvəz etmək yox, funksionallığı genişləndirmək.
Long Press və Tap — müxtəlif semantikaya malik iki fərqli jestdir. Tap (toxunma) — ani basmadır: barmaq ekrana toxunur və 100–300 ms ərzində buraxılır. Tap həmişə əsas hərəkətdir (primary action): tətbiqi açmaq, düyməni basmaq, linkə keçmək. Long Press — ikinci dərəcəli hərəkətdir (secondary action): kontekst menyusunu açmaq, redaktəyə başlamaq, əlavə məlumatı göstərmək.
| Parametr | Tap | Long Press |
|---|---|---|
| Saxlanma müddəti | 100–300 ms | 500–1000 ms |
| Hərəkət növü | Əsas (primary) | İkinci dərəcəli (secondary) |
| Nümunələr | Linkin açılması, düymənin basılması | Kontekst menyusu, redaktə |
| Əks əlaqə | Vizual (highlight) | Haptik (Haptic Feedback) |
| iOS API | UITapGestureRecognizer | UILongPressGestureRecognizer |
| Android API | setOnClickListener | setOnLongClickListener |
Əsas qayda: heç vaxt Long Press-i hərəkəti yerinə yetirməyin yeganə yolu kimi istifadə etməyin. İstifadəçilər Tap-ın əsas hərəkəti yerinə yetirməsini, Long Press-in isə əlavə seçimləri açmasını gözləyirlər. Bu prinsipin pozulması (məsələn, linki açmaq üçün uzun basma tələb etmək) mənfi istifadəçi təcrübəsinə və əlçatanlığın azalmasına gətirib çıxarır.
UILongPressGestureRecognizer — iOS SDK-da uzun basmanı idarə etmək üçün standart jest tanıyıcısı. O, UIGestureRecognizer-dən miras alır və minimal müddət, barmağın icazə verilən yerdəyişməsi və toxunma sayının konfiqurasiyasını dəstəkləyir. Tanıyıcı taymer bitdikdən sonra UIGestureRecognizerStateBegan vəziyyətinə, barmaq hərəkət etdikdə UIGestureRecognizerStateChanged-ə və buraxıldıqda UIGestureRecognizerStateEnded-ə keçir.
// UILongPressGestureRecognizer minimal müddət konfiqurasiyası ilə
class ContextMenuViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let longPressRecognizer = UILongPressGestureRecognizer(
target: self,
action: #selector(handleLongPress(_:))
)
// Minimal saxlama müddəti: 0.5 saniyə
longPressRecognizer.minimumPressDuration = 0.5
// Barmağın icazə verilən yerdəyişməsi: 10 nöqtə
longPressRecognizer.allowableMovement = 10
customView.addGestureRecognizer(longPressRecognizer)
}
@objc func handleLongPress(_ recognizer: UILongPressGestureRecognizer) {
guard recognizer.state == .began else { return }
// Kontekst menyusunun yaradılması
let location = recognizer.location(in: self.view)
ContextMenuPresenter.show(at: location)
}
}Konfiqurasiya parametrləri: minimumPressDuration — işə düşməyə qədər saniyələrlə vaxt (standart 0.5, accessibility üçün 0.65+ tövsiyə olunur); allowableMovement — barmağın nöqtələrlə maksimum yerdəyişməsi (standart 10, artırma əl titrəməsində kömək edir). iOS multitouch jestləri üçün numberOfTouchesRequired-ı dəstəkləyir (məsələn, iki barmaqla uzun basma). Tanıyıcı həmçinin UIContextMenuInteraction ilə inteqrasiya olunur — UIView-ə UIContextMenuConfiguration vasitəsilə context menu əlavə edildikdə, Long Press jestin əl ilə reallaşdırılması olmadan avtomatik kontekst menyusunu çağırır.
setOnLongClickListener — Android SDK-da View-in uzun basma dinləyicisini təyin edən metodu. İstifadəçi View-i 500 ms-dən çox saxladıqda, sistem onLongClick()-i çağırır. Metod boolean qaytarır — true hadisənin işləndiyini və daha ötürülməməli olduğunu, false isə hadisənin digər dinləyicilər tərəfindən işlənə biləcəyini bildirir. Daha mürəkkəb idarəetmə üçün (Long Press başladıqdan sonra barmaq hərəkəti) OnGestureListener ilə GestureDetector istifadə olunur.
// Haptik əks əlaqə ilə setOnLongClickListener nümunəsi
val itemView: View = findViewById(R.id.itemView)
itemView.setOnLongClickListener {
// Jestin başlanğıcını təsdiqləmək üçün haptik cavab
it.performHapticFeedback(
HapticFeedbackConstants.LONG_PRESS
)
// Elementin mövqeyində kontekst menyusunun göstərilməsi
val popup = PopupMenu(this, it)
popup.menuInflater.inflate(R.menu.context_menu, popup.menu)
popup.show()
true // Hadisə işləndi
}GestureDetector jest üzərində daha incə nəzarət təmin edir. setOnLongClickListener-dən fərqli olaraq, GestureDetector başlanğıc (onLongPress), hərəkət (onScroll) və buraxılma barədə xəbərdarlıq edir. Bu, mürəkkəb ssenariləri reallaşdırmağa imkan verir — məsələn, uzun basmadan sonra sürükləməyə başlamaq (Drag-and-Drop). OnGestureListener altı metodun reallaşdırılmasını tələb edir: onDown, onShowPress, onSingleTapUp, onScroll, onLongPress, onFling.
Long Press mobil interfeyslərin onlarla ssenarisində istifadə olunur. Ən geniş yayılmış tətbiq kontekst menyusudur: kontaktda uzun basma əlaqə variantlarını (zəng, mesaj, e-poçt), faylda — seçimləri (köçür, daşı, sil), mətndə — seçim və buferi göstərir. Android Launcher ikonada uzun basmanı tətbiqləri daşımaq və vidjetlər əlavə etmək üçün istifadə edir.
Mətn seçimi — hər iki platformada Long Press-in klassik nümunəsidir. iOS-da mətndə uzun basma kursoru yerləşdirmək üçün lupanı aktivləşdirir; sözdə — onu markerlərlə seçir. Android-də uzun basma bütün sözü seçir və hərəkət panelini (köçür, kəs, yapışdır) göstərir. Hər iki platforma seçimi genişləndirmək üçün markerlərin sürüklənməsindən istifadə edir.
Önbaxış — iOS-da Safari-də linkdə və ya Mail-də mesajda uzun basma məzmunun önbaxışını açır (peek). Android-də oxşar davranış bildirişdə Long Press vasitəsilə reallaşdırılır (bildirişi hərəkət düymələri ilə genişləndirir). Photos tətbiqləri şəklin tez önbaxışı üçün miniatür uzun basmadan istifadə edir.
Drag-and-Drop çox vaxt Long Press ilə başladılır. İstifadəçi elementi saxlayır, sistem sürükləmə rejiminə keçir və barmağın hərəkəti elementi ekranda hərəkət etdirir. Android bu ssenarini Long Press-dən sonra View.startDragAndDrop() vasitəsilə dəstəkləyir. iOS UIDragInteraction istifadə edir, burada drag interaction sürükləməyə başlamaq üçün uzun basma tələb edir.
Human Interface Guidelines hər iki platformada aydın tövsiyələr verir: Long Press həmişə ikinci dərəcəli hərəkət olmalıdır. Heç vaxt uzun basmanı kritik funksiyanı yerinə yetirməyin yeganə yolu etməyin. İstifadəçilər əvvəlcə Tap-ı sınayırlar — əgər Tap gözlənildiyi kimi işləmirsə, onlar məyus olurlar. Vizual ipuçları əlavə edin: kontekst menyusu üç nöqtə işarəsi ilə göstərilə bilər, Long Press-i dəstəkləyən elementlər isə toxunma zamanı vizual işarə ilə.
Haptik əks əlaqə Long Press üçün məcburidir. Jest tanındıqda, cihaz bunu haptik cavabla təsdiqləməlidir: iOS-da bu UIImpactFeedbackGenerator yüngül impulsladır, Android-də — HapticFeedbackConstants.LONG_PRESS. Haptik əks əlaqə olmadan istifadəçi jestin işlədiyinə əmin olmur və təkrar basa bilər, arzuolunmaz hərəkətlərə səbəb ola bilər.
| Tövsiyə | iOS | Android |
|---|---|---|
| Tanıma taym-autu | 0.5–0.65 saniyə | 500 ms (standart) |
| Haptik əks əlaqə | UIImpactFeedbackGenerator | HapticFeedbackConstants.LONG_PRESS |
| Vizual feedback | Kontekst menyusu, seçim | PopupMenu, dalğa animasiyası |
| Əlçatanlıq (Accessibility) | VoiceOver + Custom Actions | TalkBack + AccessibilityNodeInfo |
| Maks. barmaq yerdəyişməsi | allowableMovement = 10 pt | TouchSlop (standart ~8 dp) |
| Sürüşdürmə ilə konflikt | cancelsTouchesInView = delayed | onInterceptTouchEvent + LongPress |
Əlçatanlıq: bütün istifadəçilər uzun basma hərəkətini yerinə yetirə bilməz (motor pozuntuları olan şəxslər, yaşlı istifadəçilər). Həmişə Long Press hərəkətlərinə alternativ giriş təmin edin — məsələn, interfeysdə «Daha çox» düyməsi və ya sistem əlçatanlıq funksiyaları (iOS-da VoiceOver, Android-də TalkBack) vasitəsilə. iOS üçün UIAccessibilityCustomAction-da VoiceOver rotorundan əlçatan olan Custom Actions əlavə edilə bilər.
Tez-tez verilən suallar
Long Press üçün standart müddət hər iki platformada 0,5 saniyə (500 ms) təşkil edir. iOS minimumPressDuration-u 0.3-dən 1.0 saniyəyə qədər konfiqurasiya etməyə imkan verir. Android View.setOnLongClickListener üçün sabit 500 ms taym-autdan istifadə edir. Motor məhdudiyyəti olan istifadəçilər üçün taym-autu 0,8–1,0 saniyəyə qədər artırmaq tövsiyə olunur.
Long Press saxlama müddətinə (0,5 s) görə tanınır, 3D Touch — basma gücünə görə (qram təzyiq). 3D Touch yalnız iPhone 6S–XR-də mövcuddur (apparat Force Touch texnologiyası). iOS 13-dən etibarən Apple 3D Touch-ı Haptic Touch ilə əvəz etmişdir — haptik əks əlaqə ilə Long Press vasitəsilə işləyən proqram təqlidi. Haptic Touch bütün müsir iPhone və iPad-lərdə mövcuddur.
Long Press və sürüşdürmə konflikti tez-tez rast gəlinən problemdir. Həll yolu: iOS-da jest tanıyıcısı üçün delaysTouchesBegan = true təyin edin (sistem touchesBegan-ı dərhal göndərmir, jestin tanınmasını gözləyir). Android-də Long Press üçün false qaytaran onInterceptTouchEvent istifadə edin. İstifadəçi taym-autdan əvvəl barmağını hərəkət etdirməyə başlayarsa — jest sürüşdürmənin xeyrinə ləğv edilir.
Bəli, Long Press veb-tətbiqlərdə dəstəklənir vaxtın ölçülməsi ilə touchstart/touchend hadisələri vasitəsilə. Müasir brauzerlər həmçinin mobil cihazlarda uzun basma zamanı işə düşən contextmenu hadisəsini dəstəkləyir. Çarpaz-brauzer uyğunluğu üçün hammer.js kitabxanalarından istifadə edin və ya touchstart handler-də setInterval vasitəsilə xüsusi tanıyıcı reallaşdırın.
iOS-da haptik əks əlaqə UIImpactFeedbackGenerator vasitəsilə əlavə edilir. UILongPressGestureRecognizer began vəziyyətinə keçdiyi anda impactOccurred()-i çağırın. Yüngül cavab üçün UIImpactFeedbackGenerator(style: .light) istifadə edin. Daha nəzərə çarpan üçün — .medium. Kontekst menyuları üçün iOS əlavə kod olmadan UIContextMenuInteraction vasitəsilə avtomatik haptik əks əlaqə əlavə edir.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun