Long Press, parmağın belirli bir süre (genellikle 0,5–1 saniye) boyunca hareket etmeden ekranda kaldığı uzun basma hareketidir. Tap'ın aksine, Long Press dokunma anında değil, gecikme zamanlayıcısının süresi dolduktan sonra tanınır. Bu hareket, bağlam menüsü çağırma, içerik önizleme, birden çok nesne seçme ve ek eylemleri etkinleştirme için kullanılır. iOS'ta UILongPressGestureRecognizer, Android'de ise setOnLongClickListener veya GestureDetector aracılığıyla uygulanır.
Önemli Noktalar
Long Press (uzun basma, uzun dokunma), kullanıcının ekrana dokunduğu ve parmağını belirli bir süre hareketsiz tuttuğu bir çoklu dokunma arayüzü hareketidir. Sistem anında tepki vermez: bir zaman aşımını (genellikle 500 ms) bekler ve süresi dolduktan sonra hareketi Long Press olarak tanır. Parmak daha erken kaldırılırsa, hareket normal Tap olarak yorumlanır.
Bu hareket, modern mobil arayüzlerin temel yapı taşıdır. Apple bunu uygulamalarda (Messages, Safari, Files) bağlam menülerini çağırmak için kullanır. Google, Long Press'i Android'de metin seçimi, ana ekranda simgeleri yeniden düzenleme ve bağlam menülerini çağırma işlevlerine eklemiştir. Web arayüzlerinde, uzun basma genellikle fiziksel sağ düğmesi olmayan mobil cihazlarda fare sağ tıklamasını taklit eder.
Tarihsel olarak, Long Press dokunmatik ekranlar için bağlam menüsüne (sağ tıklama) bir alternatif olarak ortaya çıkmıştır. İlk uygulamalar dirençli ekranlı cihazlarda (Palm, 2000'lerin başında Windows Mobile) görülmüş, ancak hareket yalnızca iPhone ve Android'in ortaya çıkışıyla standartlaşmıştır. Her iki platformun İnsan Arayüzü Kılavuzları, Long Press'i ikincil bir eylem olarak tanımlar — Tap'ın yerine geçen değil, işlevselliğin bir uzantısı olarak.
Long Press ve Tap, farklı anlamlara sahip iki farklı harekettir. Tap anlık bir dokunuştur: parmak ekrana dokunur ve 100–300 ms içinde kaldırılır. Tap her zaman bir birincil eylemdir: uygulama açmak, düğmeye basmak, bağlantıyı takip etmek. Long Press ise bir ikincil eylemdir: bağlam menüsü açmak, düzenlemeye başlamak, ek bilgi göstermek.
| Parametre | Tap | Long Press |
|---|---|---|
| Basılı tutma süresi | 100–300 ms | 500–1000 ms |
| Eylem türü | Birincil (primary) | İkincil (secondary) |
| Örnekler | Bağlantı açma, düğmeye basma | Bağlam menüsü, düzenleme |
| Geri bildirim | Görsel (vurgulama) | Dokunsal (Dokunsal Geri Bildirim) |
| iOS API | UITapGestureRecognizer | UILongPressGestureRecognizer |
| Android API | setOnClickListener | setOnLongClickListener |
Temel kural: Long Press'i bir eylemi gerçekleştirmenin tek yolu olarak asla kullanmayın. Kullanıcılar Tap'in birincil eylemi gerçekleştirmesini ve Long Press'in ek seçenekler açmasını bekler. Bu ilkeyi ihlal etmek (örneğin, bir bağlantıyı açmak için uzun basma gerektirmek) olumsuz kullanıcı deneyimine ve azaltılmış erişilebilirliğe yol açar.
UILongPressGestureRecognizer, uzun basmayı işlemek için iOS SDK'daki standart jest tanıyıcıdır. UIGestureRecognizer'dan devralır ve minimum süre, izin verilen parmak hareketi ve dokunma sayısının yapılandırılmasını destekler. Tanıyıcı, zamanlayıcının süresi dolduktan sonra UIGestureRecognizerStateBegan durumuna, ardından parmak hareket ettiğinde UIGestureRecognizerStateChanged'a ve parmak kaldırıldığında UIGestureRecognizerStateEnded'a geçer.
// Minimum süre yapılandırmasıyla UILongPressGestureRecognizer
class ContextMenuViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let longPressRecognizer = UILongPressGestureRecognizer(
target: self,
action: #selector(handleLongPress(_:))
)
// Minimum basılı tutma süresi: 0.5 saniye
longPressRecognizer.minimumPressDuration = 0.5
// İzin verilen parmak hareketi: 10 nokta
longPressRecognizer.allowableMovement = 10
customView.addGestureRecognizer(longPressRecognizer)
}
@objc func handleLongPress(_ recognizer: UILongPressGestureRecognizer) {
guard recognizer.state == .began else { return }
// Bağlam menüsü oluşturma
let location = recognizer.location(in: self.view)
ContextMenuPresenter.show(at: location)
}
}Yapılandırma parametreleri: minimumPressDuration — etkinleştirmeden önce saniye cinsinden süre (varsayılan 0.5, erişilebilirlik için 0.65+ önerilir); allowableMovement — parmağın nokta cinsinden maksimum hareketi (varsayılan 10, titrek ellerde artırmak yardımcı olur). iOS, çoklu dokunma hareketleri için numberOfTouchesRequired'ı destekler (örneğin, iki parmakla uzun basma). Tanıyıcı ayrıca UIContextMenuInteraction ile de entegre olur — UIContextMenuConfiguration aracılığıyla bir UIView'a bağlam menüsü eklendiğinde, Long Press manuel jest uygulaması olmadan otomatik olarak bağlam menüsünü çağırır.
setOnLongClickListener, Android SDK'da uzun basma dinleyicisi ayarlayan bir View yöntemidir. Bir kullanıcı bir View'ı 500 ms'den fazla basılı tuttuğunda, sistem onLongClick()'i çağırır. Yöntem bir boolean döndürür — true, olayın işlendiği ve daha fazla yayılmaması gerektiği anlamına gelir, false ise olayın diğer dinleyiciler tarafından işlenebileceği anlamına gelir. Daha karmaşık işleme (Long Press başladıktan sonra parmak hareketi) için, OnGestureListener ile GestureDetector kullanılır.
// Dokunsal geri bildirimle setOnLongClickListener örneği
val itemView: View = findViewById(R.id.itemView)
itemView.setOnLongClickListener {
// Jest başlangıcını onaylamak için dokunsal yanıt
it.performHapticFeedback(
HapticFeedbackConstants.LONG_PRESS
)
// Öğe konumunda bağlam menüsü gösterme
val popup = PopupMenu(this, it)
popup.menuInflater.inflate(R.menu.context_menu, popup.menu)
popup.show()
true // Olay işlendi
}GestureDetector, jest üzerinde daha ince bir kontrol sağlar. setOnLongClickListener'ın aksine, GestureDetector başlangıç (onLongPress), hareket (onScroll) ve bırakma hakkında bildirimde bulunur. Bu, karmaşık senaryolara olanak tanır — örneğin, uzun basmadan sonra sürükleme başlatma (Drag-and-Drop). OnGestureListener, altı yöntemin uygulanmasını gerektirir: onDown, onShowPress, onSingleTapUp, onScroll, onLongPress, onFling.
Long Press, düzinelerce mobil arayüz senaryosunda kullanılır. En yaygın uygulama bağlam menüsüdür: bir kişiye uzun basma iletişim seçeneklerini (arama, mesaj, e-posta) gösterir, bir dosyada — seçenekler (kopyala, taşı, sil), metinde — seçim ve pano. Android Başlatıcı, uygulamaları taşımak ve widget eklemek için bir simgeye uzun basma kullanır.
Metin seçimi her iki platformda da Long Press'in klasik bir örneğidir. iOS'ta, metne uzun basmak imleç konumlandırması için bir büyüteci etkinleştirir; bir kelimede — onu işaretçilerle seçer. Android'de, uzun basma tüm kelimeyi seçer ve bir eylem çubuğu (kopyala, kes, yapıştır) gösterir. Her iki platform da seçimi genişletmek için işaretçilerin sürüklenmesini kullanır.
Önizleme — iOS'ta, Safari'de bir bağlantıya veya Mail'de bir mesaja uzun basmak içerik önizlemesini (peek) açar. Android'de, benzer davranış bir bildirime Long Press ile uygulanır (eylem düğmeleriyle bildirimi genişletir). Fotoğraf uygulamaları, hızlı görüntü önizlemesi için küçük resme uzun basma kullanır.
Sürükle ve Bırak (Drag-and-Drop) genellikle Long Press ile başlatılır. Kullanıcı öğeyi basılı tutar, sistem sürükleme moduna geçer ve parmak hareketi öğeyi ekranda taşır. Android, Long Press'ten sonra View.startDragAndDrop() aracılığıyla bu senaryoyu destekler. iOS, sürükleme etkileşiminin başlaması için uzun basma gerektiren UIDragInteraction'ı kullanır.
Her iki platformun İnsan Arayüzü Kılavuzları net öneriler sunar: Long Press her zaman ikincil bir eylem olmalıdır. Kritik bir işlevi gerçekleştirmenin tek yolu olarak uzun basmayı asla kullanmayın. Kullanıcılar önce Tap'i dener — Tap beklenildiği gibi çalışmazsa hayal kırıklığına uğrarlar. Görsel ipuçları ekleyin: bağlam menüleri üç nokta simgesiyle, Long Press'i destekleyen öğeler ise dokunmada görsel bir ipucuyla belirtilebilir.
Dokunsal geri bildirim Long Press için zorunludur. Jest tanındığında, cihaz bunu dokunsal geri bildirimle onaylamalıdır: iOS'ta bu hafif bir darbeyle UIImpactFeedbackGenerator, Android'de — HapticFeedbackConstants.LONG_PRESS'tir. Dokunsal geri bildirim olmadan, kullanıcı jestin kaydedildiğinden emin olamaz ve tekrar basarak istenmeyen eylemlere neden olabilir.
| Öneri | iOS | Android |
|---|---|---|
| Tanıma zaman aşımı | 0.5–0.65 saniye | 500 ms (varsayılan) |
| Dokunsal geri bildirim | UIImpactFeedbackGenerator | HapticFeedbackConstants.LONG_PRESS |
| Görsel geri bildirim | Bağlam menüsü, vurgulama | PopupMenu, ripple animasyonu |
| Erişilebilirlik | VoiceOver + Custom Actions | TalkBack + AccessibilityNodeInfo |
| Maksimum parmak hareketi | allowableMovement = 10 pt | TouchSlop (~8 dp varsayılan) |
| Kaydırma ile çakışma | cancelsTouchesInView = delayed | onInterceptTouchEvent + LongPress |
Erişilebilirlik: tüm kullanıcılar uzun basma yapamaz (motor bozukluğu olan kişiler, yaşlı kullanıcılar). Long Press eylemlerine erişmek için her zaman alternatif bir yol sağlayın — örneğin, arayüzde bir "Daha Fazla" düğmesi veya sistem erişilebilirlik özellikleri (iOS'ta VoiceOver, Android'de TalkBack) aracılığıyla. iOS için, VoiceOver rotoru aracılığıyla kullanılabilen UIAccessibilityCustomAction ile Özel Eylemler ekleyebilirsiniz.
Sıkça Sorulan Sorular
Long Press için standart süre her iki platformda da 0,5 saniyedir (500 ms). iOS, minimumPressDuration'u 0.3 ila 1.0 saniye arasında yapılandırmaya izin verir. Android, View.setOnLongClickListener için sabit 500 ms zaman aşımı kullanır. Sınırlı motor becerilere sahip kullanıcılar için zaman aşımının 0,8–1,0 saniyeye çıkarılması önerilir.
Long Press basılı tutma süresiyle (0,5 s), 3D Touch ise basınç kuvvetiyle (gram cinsinden) tanınır. 3D Touch yalnızca iPhone 6S–XR'de kullanılabilir (donanım Force Touch teknolojisi). iOS 13'ten itibaren Apple, 3D Touch'ı Haptic Touch ile değiştirmiştir — dokunsal geri bildirimle Long Press aracılığıyla çalışan bir yazılım simülasyonu. Haptic Touch, tüm modern iPhone ve iPad'lerde kullanılabilir.
Long Press ve kaydırma arasındaki çakışma yaygın bir sorundur. Çözüm: iOS'ta jest tanıyıcı için delaysTouchesBegan = true olarak ayarlayın (sistem touchesBegan'ı hemen göndermez, jest tanımayı bekler). Android'de, Long Press için false döndüren onInterceptTouchEvent kullanın. Kullanıcı zaman aşımından önce parmağını hareket ettirmeye başlarsa, jest kaydırma lehine iptal edilir.
Evet, Long Press web uygulamalarında desteklenir zaman ölçümüyle touchstart/touchend olayı aracılığıyla. Modern tarayıcılar ayrıca mobil cihazlarda uzun basmada tetiklenen contextmenu olayını da destekler. Çapraz tarayıcı uyumluluğu için hammer.js gibi kütüphaneler kullanın veya touchstart işleyicisinde setInterval aracılığıyla özel bir tanıyıcı uygulayın.
iOS'ta, dokunsal geri bildirim UIImpactFeedbackGenerator aracılığıyla eklenir. UILongPressGestureRecognizer began durumuna geçtiği anda impactOccurred()'i çağırın. Hafif bir yanıt için UIImpactFeedbackGenerator(style: .light) kullanın. Daha belirgin bir yanıt için — .medium. Bağlam menüleri için iOS, ek kod olmadan UIContextMenuInteraction aracılığıyla otomatik olarak dokunsal geri bildirim ekler.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun