Long Press — uzoq bosish jesti, bunda barmoq ekranda ma'lum vaqt (odatda 0,5–1 soniya) harakatlanmasdan ushlab turiladi. Tap-dan farqli o'laroq, Long Press teginish paytida emas, balki kechikish taymeri tugagandan so'ng tan olinadi. Jest kontekst menyusini chaqirish, oldindan ko'rish, bir nechta ob'ektlarni tanlash va qo'shimcha harakatlarni faollashtirish uchun ishlatiladi. iOS-da UILongPressGestureRecognizer, Android-da esa setOnLongClickListener yoki GestureDetector orqali amalga oshiriladi.
Asosiy fikrlar
Long Press (uzoq bosish, uzoq teginish) — multitouch interfeysining jesti, bunda foydalanuvchi ekranga tegadi va barmog'ini ma'lum vaqt harakatsiz ushlab turadi. Tizim darhol reaksiya bermaydi: u taym-autni (odatda 500 ms) kutadi va faqat uning tugashidan keyin jestni Long Press sifatida taniydi. Agar barmoq ertaroq qo'yib yuborilsa — jest oddiy Tap sifatida talqin qilinadi.
Jest zamonaviy mobil interfeyslarning fundamental qurilish blokidir. Apple uni ilovalarda (Messages, Safari, Files) kontekst menyularini chaqirish uchun ishlatadi. Google Long Pressni matn tanlash tizimida, ish stolida ikonkalarni ko'chirishda va Android-da kontekst menyularini chaqirishda qo'llagan. Veb-interfeyslarda uzoq bosish ko'pincha jismoniy o'ng tugmasi bo'lmagan mobil qurilmalarda sichqonchaning o'ng bosishini taqlid qiladi.
Tarixan Long Press sensorli ekranlar uchun kontekst menyusiga (o'ng bosish) muqobil sifatida paydo bo'lgan. Birinchi tatbiqlar rezistiv ekranli qurilmalarda (Palm, 2000-yillarning boshida Windows Mobile) uchraydi, ammo jest faqat iPhone va Android paydo bo'lishi bilan standartlashgan. Har ikki platformaning Human Interface Guidelines qoidalari Long Pressni ikkinchi darajali harakat sifatida tasvirlaydi — Tapni almashtirish emas, balki funksionallikni kengaytirish.
Long Press va Tap — turli semantikaga ega ikki xil jestdir. Tap (teginish) — bu bir zumda bosish: barmoq ekranga tegadi va 100–300 ms ichida qo'yib yuboriladi. Tap har doim asosiy harakatdir (primary action): ilovani ochish, tugmani bosish, linkga o'tish. Long Press — ikkinchi darajali harakatdir (secondary action): kontekst menyusini ochish, tahrirni boshlash, qo'shimcha ma'lumotni ko'rsatish.
| Parametr | Tap | Long Press |
|---|---|---|
| Ushlab turish vaqti | 100–300 ms | 500–1000 ms |
| Harakat turi | Asosiy (primary) | Ikkinchi darajali (secondary) |
| Misollar | Linkni ochish, tugmani bosish | Kontekst menyusi, tahrirlash |
| Qayta aloqa | Vizual (highlight) | Haptik (Haptic Feedback) |
| iOS API | UITapGestureRecognizer | UILongPressGestureRecognizer |
| Android API | setOnClickListener | setOnLongClickListener |
Asosiy qoida: hech qachon Long Pressni harakatni bajarishning yagona usuli sifatida ishlatmang. Foydalanuvchilar Tap asosiy harakatni bajarishini, Long Press esa qo'shimcha variantlarni ochishini kutadilar. Bu printsipning buzilishi (masalan, linkni ochish uchun uzoq bosish talab qilish) salbiy foydalanuvchi tajribasiga va mavjudlikning pasayishiga olib keladi.
UILongPressGestureRecognizer — iOS SDK-da uzoq bosishni boshqarish uchun standart jest taniyuvchisi. U UIGestureRecognizer-dan meros oladi va minimal davomiylik, barmoqning ruxsat etilgan siljishi va teginishlar sonini konfiguratsiya qilishni qo'llab-quvvatlaydi. Taniyuvchi taymer tugagandan so'ng UIGestureRecognizerStateBegan holatiga, barmoq harakatlanganda UIGestureRecognizerStateChanged-ga va qo'yib yuborilganda UIGestureRecognizerStateEnded-ga o'tadi.
// UILongPressGestureRecognizer minimal davomiylik sozlamalari bilan
class ContextMenuViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let longPressRecognizer = UILongPressGestureRecognizer(
target: self,
action: #selector(handleLongPress(_:))
)
// Minimal ushlab turish vaqti: 0.5 soniya
longPressRecognizer.minimumPressDuration = 0.5
// Barmoqning ruxsat etilgan siljishi: 10 nuqta
longPressRecognizer.allowableMovement = 10
customView.addGestureRecognizer(longPressRecognizer)
}
@objc func handleLongPress(_ recognizer: UILongPressGestureRecognizer) {
guard recognizer.state == .began else { return }
// Kontekst menyusini yaratish
let location = recognizer.location(in: self.view)
ContextMenuPresenter.show(at: location)
}
}Konfiguratsiya parametrlari: minimumPressDuration — ishga tushishgacha bo'lgan soniyalardagi vaqt (standart 0.5, mavjudlik uchun 0.65+ tavsiya etiladi); allowableMovement — barmoqning nuqtalardagi maksimal siljishi (standart 10, oshirish qo'l titrashida yordam beradi). iOS multitouch jestlari uchun numberOfTouchesRequired-ni qo'llab-quvvatlaydi (masalan, ikki barmoq bilan uzoq bosish). Taniyuvchi shuningdek UIContextMenuInteraction bilan integratsiyalanadi — UIView-ga UIContextMenuConfiguration orqali context menu qo'shilganda, Long Press jestni qo'lda amalga oshirishsiz avtomatik kontekst menyusini chaqiradi.
setOnLongClickListener — Android SDK-da Viewning uzoq bosish tinglovchisini o'rnatadigan metodi. Foydalanuvchi Viewni 500 ms dan ortiq ushlab turganda, tizim onLongClick()-ni chaqiradi. Metod boolean qaytaradi — true hodisa ishlanganligini va boshqa joyga uzatilmasligi kerakligini, false esa hodisa boshqa tinglovchilar tomonidan ham ishlanishi mumkinligini bildiradi. Murakkabroq boshqarish uchun (Long Press boshlangandan keyin barmoq harakati) OnGestureListener bilan GestureDetector ishlatiladi.
// Haptik qayta aloqa bilan setOnLongClickListener namunasi
val itemView: View = findViewById(R.id.itemView)
itemView.setOnLongClickListener {
// Jest boshlanishini tasdiqlash uchun haptik javob
it.performHapticFeedback(
HapticFeedbackConstants.LONG_PRESS
)
// Element joylashuvida kontekst menyusini ko'rsatish
val popup = PopupMenu(this, it)
popup.menuInflater.inflate(R.menu.context_menu, popup.menu)
popup.show()
true // Hodisa ishlandi
}GestureDetector jest ustida aniqroq nazoratni ta'minlaydi. setOnLongClickListener-dan farqli o'laroq, GestureDetector boshlanish (onLongPress), harakat (onScroll) va qo'yib yuborish haqida xabar beradi. Bu murakkab stsenariylarni amalga oshirishga imkon beradi — masalan, uzoq bosishdan keyin sudrab boshlash (Drag-and-Drop). OnGestureListener olti metodni amalga oshirishni talab qiladi: onDown, onShowPress, onSingleTapUp, onScroll, onLongPress, onFling.
Long Press mobil interfeyslarning o'nlab stsenariylarida ishlatiladi. Eng keng tarqalgan qo'llanilish kontekst menyusidir: kontaktda uzoq bosish aloqa variantlarini (qo'ng'iroq, xabar, elektron pochta), faylda — variantlarni (nusxalash, ko'chirish, o'chirish), matnda — tanlash va buferni ko'rsatadi. Android Launcher ikonkada uzoq bosishni ilovalarni ko'chirish va vidjetlar qo'shish uchun ishlatadi.
Matn tanlash — har ikki platformada Long Pressning klassik namunasidir. iOS-da matnda uzoq bosish kursorni joylashtirish uchun lupani faollashtiradi; so'zda — uni markerlar bilan tanlaydi. Android-da uzoq bosish butun so'zni tanlaydi va harakatlar panelini (nusxalash, kesish, joylashtirish) ko'rsatadi. Har ikki platforma tanlovni kengaytirish uchun markerlarni sudrashdan foydalanadi.
Oldindan ko'rish — iOS-da Safari-dagi linkda yoki Mail-dagi xabarda uzoq bosish tarkibning oldindan ko'rinishini ochadi (peek). Android-da o'xshash xatti-harakat bildirishnomadagi Long Press orqali amalga oshiriladi (bildirishnomani harakat tugmalari bilan kengaytiradi). Photos ilovalari rasmni tez oldindan ko'rish uchun miniatyurada uzoq bosishdan foydalanadi.
Drag-and-Drop ko'pincha Long Press bilan boshlanadi. Foydalanuvchi elementni ushlab turadi, tizim sudrash rejimiga o'tadi va barmoq harakati elementni ekran bo'ylab harakatlantiradi. Android bu stsenariyni Long Pressdan so'ng View.startDragAndDrop() orqali qo'llab-quvvatlaydi. iOS UIDragInteraction dan foydalanadi, bunda drag interaction sudrashni boshlash uchun uzoq bosishni talab qiladi.
Human Interface Guidelines har ikki platformada aniq tavsiyalar beradi: Long Press har doim ikkinchi darajali harakat bo'lishi kerak. Hech qachon uzoq bosishni muhim funksiyani bajarishning yagona usuliga aylantirmang. Foydalanuvchilar avval Tapni sinab ko'rishadi — agar Tap kutilganidek ishlamasa, ular hafsalasi pir bo'ladi. Vizual ko'rsatmalar qo'shing: kontekst menyulari uch nuqta belgisi bilan ko'rsatilishi mumkin, Long Pressni qo'llab-quvvatlovchi elementlar esa teginish paytida vizual ishora bilan.
Haptik qayta aloqa Long Press uchun majburiydir. Jest tanilganda, qurilma buni haptik javob bilan tasdiqlashi kerak: iOS-da bu UIImpactFeedbackGenerator engil impuls bilan, Android-da — HapticFeedbackConstants.LONG_PRESS. Haptik qayta aloqasiz foydalanuvchi jest ishlaganiga ishonch hosil qilmaydi va qayta bosishi mumkin, bu istalmagan harakatlarga olib keladi.
| Tavsiya | iOS | Android |
|---|---|---|
| Tanib olish taym-auti | 0.5–0.65 soniya | 500 ms (standart) |
| Haptik qayta aloqa | UIImpactFeedbackGenerator | HapticFeedbackConstants.LONG_PRESS |
| Vizual feedback | Kontekst menyusi, ajratib ko'rsatish | PopupMenu, ripple animatsiyasi |
| Mavjudlik (Accessibility) | VoiceOver + Custom Actions | TalkBack + AccessibilityNodeInfo |
| Maks. barmoq siljishi | allowableMovement = 10 pt | TouchSlop (standart ~8 dp) |
| Aylantirish bilan ziddiyat | cancelsTouchesInView = delayed | onInterceptTouchEvent + LongPress |
Mavjudlik: barcha foydalanuvchilar uzoq bosishni bajara olmaydi (harakat buzilishi bo'lgan shaxslar, keksa foydalanuvchilar). Har doim Long Press harakatlariga muqobil kirishni ta'minlang — masalan, interfeysdagi «Ko'proq» tugmasi yoki tizimning mavjudlik funksiyalari (iOS-da VoiceOver, Android-da TalkBack) orqali. iOS uchun UIAccessibilityCustomAction-da VoiceOver rotori orqali mavjud bo'lgan Custom Actions qo'shilishi mumkin.
Tez-tez so'raladigan savollar
Long Press uchun standart vaqt har ikki platformada 0,5 soniya (500 ms) ni tashkil qiladi. iOS minimumPressDuration-ni 0.3 dan 1.0 soniyagacha sozlash imkonini beradi. Android View.setOnLongClickListener uchun qat'iy 500 ms taym-autdan foydalanadi. Harakat cheklovi bo'lgan foydalanuvchilar uchun taym-autni 0,8–1,0 soniyagacha oshirish tavsiya etiladi.
Long Press ushlab turish vaqti (0,5 s) bo'yicha taniladi, 3D Touch — bosish kuchi (gramm bosim) bo'yicha. 3D Touch faqat iPhone 6S–XR da mavjud (apparat Force Touch texnologiyasi). iOS 13 dan boshlab Apple 3D Touch ni Haptic Touch bilan almashtirdi — haptik qayta aloqa bilan Long Press orqali ishlaydigan dasturiy taqlid. Haptic Touch barcha zamonaviy iPhone va iPad qurilmalarida mavjud.
Long Press va aylantirish ziddiyati tez-tez uchraydigan muammodir. Yechim: iOS-da jest taniyuvchisi uchun delaysTouchesBegan = true ni o'rnating (tizim touchesBegan-ni darhol yubormaydi, jestning tan olinishini kutadi). Android-da Long Press uchun false qaytaradigan onInterceptTouchEvent dan foydalaning. Agar foydalanuvchi taym-autdan oldin barmog'ini harakatlantira boshlasa — jest aylantirish foydasiga bekor qilinadi.
Ha, Long Press veb-ilovalarda qo'llab-quvvatlanadi vaqtni o'lchash bilan touchstart/touchend hodisalari orqali. Zamonaviy brauzerlar, shuningdek, mobil qurilmalarda uzoq bosishda ishga tushadigan contextmenu hodisasini ham qo'llab-quvvatlaydi. O'zaro brauzer mosligi uchun hammer.js kabi kutubxonalardan foydalaning yoki touchstart handlerida setInterval orqali maxsus taniyuvchini amalga oshiring.
iOS-da haptik qayta aloqa UIImpactFeedbackGenerator orqali qo'shiladi. UILongPressGestureRecognizer began holatiga o'tgan paytda impactOccurred()-ni chaqiring. Engil javob uchun UIImpactFeedbackGenerator(style: .light) dan foydalaning. Ko'proq seziladigan uchun — .medium. Kontekst menyulari uchun iOS qo'shimcha kodsiz UIContextMenuInteraction orqali avtomatik haptik qayta aloqa qo'shadi.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.