Tap: nedir, iOS ve Android'de dokunma işleme

Yazar: IT Sectr Yayınlanma: 2026-02-27 Okuma süresi: 9 dk

Tap dokunmatik arayüzlerin temel jestidir: parmakla ekrana bir kez dokunup bırakma. Tap, mobil işletim sistemlerinde birincil eylemdir — uygulama açma, butonlara basma, liste öğelerini seçme. 100–300 ms içinde tanınır ve bir tıklama olayı oluşturur. iOS'ta UITapGestureRecognizer aracılığıyla, Android'de — setOnClickListener veya View.onClick aracılığıyla işlenir.

Önemli noktalar

  • Temel jest — Tap, dokunmatik arayüzle etkileşimin başladığı temel jesttir
  • Birincil eylem — Tap her zaman ana eylemi gerçekleştirir: butona basma, bağlantı açma, öğe seçme
  • UITapGestureRecognizer — Çoklu dokunma ve birden çok tap desteğiyle Tap işleme için iOS'un ana sınıfı
  • setOnClickListener — View'de tıklamaları işlemek için Android'in standart yöntemi
  • Gecikme — Tap 100–300 ms içinde tanınır ve bekleme zaman aşımı olmamalıdır

Tap nedir?

Tap (dokunma, basma) parmak veya kalemle dokunmatik ekrana hızlıca dokunma jestidir. Jest iki aşamadan oluşur: aşağı dokunma ve bırakma, aynı yerde hareket etmeden gerçekleşir. Sistem, aşağı ve yukarı arasındaki zaman aralığı bir eşik değerini (genellikle 300–500 ms) aşmadığında Tap'ı tanır. Kullanıcı parmağını daha uzun süre tutarsa — jest uzun basma haline gelir.

Tap mobil UX'in temelidir. Tüm mobil platformlarda Tap, masaüstü arayüzlerde kullanılan sol fare tıklamasının yerini alır. Fare tıklamasının aksine, Tap'ın değiştiricileri (Shift+tıklama, Ctrl+tıklama) ve hover'ı yoktur — bu sınırlama mobil arayüz tasarımını şekillendirir. Önizleme eksikliğini telafi etmek için mobil platformlar görsel geri bildirim kullanır: dokunmada vurgulama, Android'de dalga efekti, iOS'ta opaklık değişimi.

Tap'ın anatomisi sistem düzeyinde beş aşama içerir: sensör uyanması (dokunma), koordinat belirleme, gürültü filtreleme (parmak bir eşik mesafesinden fazla hareket etmemelidir), tamamlanma bekleme (bırakma veya tutma), sınıflandırma (Tap, uzun basma, sürükleme). Modern dokunmatik denetleyiciler bu döngüyü 60–120 Hz yoklama hızında 8–16 ms'de işler.

Tap ve Click: fark nedir?

Tap ve Click farklı fiziklere sahip farklı olaylardır. Click, fare düğmesinin aynı konumda basılıp bırakılmasıyla oluşan bir fare olayıdır. Tap, bir parmağın dokunmasıyla oluşan bir dokunmatik ekran olayıdır. Mobil cihazlarda tarayıcı, Tap'ı 300–350 ms gecikmeyle tıklama olayına dönüştürür (çift dokunma yakınlaştırmasını taklit etmek için). Bu gecikme, Apple ve Google user-scalable=no ile meta viewport'u tanıtana kadar mobil web için tarihsel bir sorundu.

ParametreTap (dokunmatik)Click (fare)
Giriş cihazıParmak, kalemFare imleci
Aşamalartouchstart → touchendmousedown → mouseup
Önizleme (hover)YokVar (hover)
Gecikme0–500 ms0 ms
DoğrulukDüşük (parmak imleçten geniş)Yüksek (piksel düzeyinde)
DeğiştiricilerYokShift, Ctrl, Cmd
Birden çokÇoklu dokunma (2+ parmak)Hayır (tek imleç)

Touch Events, Mouse Events'ten ayrı bir API'dir. Dokunma olayları (touchstart, touchmove, touchend) bir dizi dokunma noktası (TouchList), koordinat, basınç ve dokunma alanı boyutu (radiusX, radiusY) iletir. Mouse Events yalnızca imleç koordinatlarını iletir. Modern tarayıcılar, parmak hareketi yoksa ve touchcancel olayı yoksa touchend'den tıklama sentezler. Pointer Events API her iki yaklaşımı birleştirerek tüm giriş cihazları için birleşik işleme sağlar.

iOS'ta Tap: UITapGestureRecognizer

UITapGestureRecognizer, iOS SDK'da tekli ve çoklu Tap için standart tanıyıcıdır. numberOfTapsRequired (ardışık dokunma sayısı) ve numberOfTouchesRequired (aynı anda dokunan parmak sayısı) yapılandırmasını destekler. Tanıyıcı, kullanıcı parmağını bıraktığında ve dokunma hareket eşiğini aşmadığında UIGestureRecognizerStateRecognized durumuna geçer.

swift
// Çift Tap desteğiyle UITapGestureRecognizer
class InteractiveImageViewController: UIViewController {

    private var imageView: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()

        // Tekli Tap — kontrolleri göster/gizle
        let singleTap = UITapGestureRecognizer(
            target: self,
            action: #selector(handleSingleTap)
        )
        imageView.addGestureRecognizer(singleTap)

        // Çift Tap — görüntüyü yakınlaştır
        let doubleTap = UITapGestureRecognizer(
            target: self,
            action: #selector(handleDoubleTap)
        )
        doubleTap.numberOfTapsRequired = 2

        // Tekli Tap yalnızca Çift Tap tanınmazsa tetiklenir
        singleTap.require(doubleTap.toFail())
        imageView.addGestureRecognizer(doubleTap)
    }

    @objc private func handleSingleTap() { /* kontrolleri göster */ }
    @objc private func handleDoubleTap() { /* yakınlaştır */ }
}

Önemli desen: Tekli ve Çift Tap'ı aynı anda desteklerken require(_:toFail:) çağrılmalıdır. Bu olmadan, tekli tap hemen tetiklenir ve sistemin ikinci bir basışı beklemesine izin vermez. iOS ayrıca UIControl.addTarget aracılığıyla Tap tanımayı destekler — UIButton, UISwitch ve diğer kontroller için. UIKit'in yerleşik kontrolleri zaten standart Tap işlemeye sahiptir ve üzerlerine UITapGestureRecognizer eklemek çakışmalara yol açabilir.

Android'de Tap: setOnClickListener

View.setOnClickListener, View'de tıklamaları işlemek için Android SDK'nın standart yöntemidir. Bir kullanıcı bir View'e dokunduğunda ve parmağını aynı öğede bıraktığında (View içinde touch down → touch up), onClick() yöntemi çağrılır. Android, dokunma animasyonuyla birlikte otomatik olarak bir dalga efekti (API 21+'da) ekler. Bir buton, PRESSED durumunda basılı olarak kabul edilir ve bu, bir seçici veya RippleDrawable aracılığıyla görsel olarak görüntülenir.

kotlin
// Data Binding ile Fragment'te setOnClickListener
class ItemListFragment : Fragment() {

    private var binding: FragmentItemListBinding? = null

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        binding = FragmentItemListBinding.bind(view)
        binding.submitButton.setOnClickListener {
            submitForm()
        }

        // Çift tıklamayı önlemek için debounce dinleyicisi
        binding.submitButton.setOnClickListener(
            DebouncingClickListener {
                submitForm()
            }
        )
    }

    private fun submitForm() {
        // Form verilerini gönderme
    }
}

Debounce, Android geliştirmede önemli bir desendir. Bir kullanıcı kısa sürede yanlışlıkla bir butona iki kez basabilir, bu da formun çift gönderilmesine veya eylemin iki kez gerçekleştirilmesine yol açar. Çözüm: 500–1000 ms boyunca tekrarlanan tıklamaları engelleyen bir DebouncingClickListener sarmalayıcısı. Google, resmi Android Architecture Components örneklerinde bu yaklaşımı önerir. RecyclerView için, geri arama arayüzüne sahip ListAdapter aracılığıyla setOnItemClickListener sağlanır.

Birden çok dokunma: Çift Tap ve Üçlü Tap

Çift Tap — 300–400 ms'yi geçmeyen aralıkla ardışık iki Tap. Görüntüleri yakınlaştırmak (haritalar, fotoğraflar), sosyal ağlarda beğenmek (Instagram, Twitter), listenin başına dönmek (Telefon, Mesajlar) için kullanılır. Üçlü Tap daha az yaygındır — esas olarak erişilebilirlik işlevleri (tam ekran modu, VoiceOver) ve oyunlarda kullanılır.

Çift Tap uygulaması Tekli Tap ile senkronizasyon gerektirir: her iki jesti de bir öğeye eklerseniz, Tekli Tap gecikmeyle tetiklenir (sistem ikinci bir basışı bekler). iOS'ta bu gecikme require(toFail:) aracılığıyla yönetilir — Tekli Tap, Çift Tap'ın oluşmayacağından emin olana kadar ertelenir. Android'de, onSingleTapConfirmed ve onDoubleTap geri aramalarıyla GestureDetector.OnDoubleTapListener kullanılır. onSingleTapConfirmed, yalnızca sistem bunun tek bir dokunma olduğundan emin olduğunda bir zaman aşımından sonra çağrılır.

kotlin
// GestureDetector aracılığıyla Android'de Çift Tap
class PhotoViewerActivity : AppCompatActivity() {

    private var gestureDetector: GestureDetector? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        gestureDetector = GestureDetector(this, object : GestureDetector.SimpleOnGestureListener() {

            override fun onSingleTapConfirmed(e: MotionEvent): Boolean {
                toggleControls() // kontrolleri göster/gizle
                return true
            }

            override fun onDoubleTap(e: MotionEvent): Boolean {
                zoomToPoint(e.x, e.y) // dokunma noktasında yakınlaştır
                return true
            }
        })
    }
}

Instagram benzeri çift tap, sosyal uygulamalar için popüler bir UX desenidir. Bir fotoğrafa çift dokunma, beğeni animasyonunu (kalp simgesi) tetikler. Android'de GestureDetector veya iOS'ta numberOfTapsRequired=2 ile UITapGestureRecognizer aracılığıyla uygulanır. Animasyon için iOS'ta Core Animation ve Android'de ObjectAnimator/AnimatorSet kullanılır. Çift tap yanıt süresi minimum olmalıdır — kullanıcı ikinci dokunmadan sonra anında animasyon bekler.

Arayüzlerde Tap kullanım kuralları

Apple'ın Human Interface Guidelines ve Google'ın Material Design'ının Tap için belirli gereksinimleri vardır. Minimum dokunma hedefi boyutu: iOS için 44×44 pt ve Android için 48×48 dp. Bu, ekranda ~9 mm'ye karşılık gelir — ortalama bir yetişkinin parmak ucu boyutu. Dokunma hedefleri arasındaki mesafe, yanlış dokunmaları önlemek için en az 8 pt/dp olmalıdır.

KuralDeğerGerekçe
Minimum hedef boyutu44×44 pt (iOS) / 48×48 dp (Android)Ortalama parmak ucu boyutu ~9 mm
Hedefler arası boşluk≥8 pt / ≥8 dpYanlış dokunmaları önleme
Görsel geri bildirimVurgulama / DalgaDokunma kaydının onaylanması
Dokunma animasyonu süresi100–200 msAlgı için yeterli, arayüzü yavaşlatmaz
Çift Tap işlemeTekli Tap gecikmesi gerektirirYanlış tetiklemeyi önleme
Ekran kenar alanlarıArtırılmış vuruş alanıCihaz tutuşunun telafisi

Görsel geri bildirim Tap için zorunludur. Kullanıcı, dokunmanın kaydedildiğini görmelidir: renk değişimi, opaklık, dalga animasyonu veya vurgulama. Geri bildirim olmadan kullanıcı tekrar dokunabilir ve istenmeyen eylemlere neden olabilir. iOS'ta standart dokunma vurgulama animasyonu, 0.15 s süreyle opaklığın 0.3'e değiştirilmesidir. Android'de — dokunma noktasından yayılan Material dalga efekti. Görsel geri bildirimi geciktirmeyin — kullanıcı tepkiyi dokunmayla eşzamanlı olarak görmelidir.

Sıkça sorulan sorular

Web geliştirmede Tap ve Click arasındaki fark nedir?

Tap bir dokunma olayıdır, Click bir fare olayıdır. Tarayıcıda, Tap 300 ms gecikmeyle Click'e dönüştürülür (Çift Tap Yakınlaştırmadan ayırt etmek için). Modern tarayıcılar (Chrome 32+, Safari 9.1+) meta viewport width=device-width ile bu gecikmeyi devre dışı bırakır. Birleşik işleme için Pointer Events API kullanın: pointerdown/pointerup tüm giriş cihazları (fare, dokunma, kalem) için çalışır.

Tap için minimum buton boyutu nedir?

Minimum dokunma hedefi 44×44 nokta (iOS) veya 48×48 dp (Android)'dir. Bu, fiziksel ekranda yaklaşık 9×9 mm'ye karşılık gelir. Bir buton görsel olarak daha küçükse (örneğin, 24×24 simge), UIEdgeInsets (iOS) veya TouchDelegate (Android) aracılığıyla vuruş alanını artırın. Bitişik hedefler arasındaki boşluk, yanlış dokunmaları önlemek için en az 8 birim olmalıdır.

Bir butonda çift tıklama nasıl önlenir?

Çift tıklama önleme, bir debounce mekanizması aracılığıyla uygulanır: ilk tıklamadan sonra buton 500–1000 ms boyunca bloke edilir. Android'de DebouncingClickListener (Architecture Components'tan hazır çözüm) kullanın. iOS'ta, basıştan hemen sonra butonun isEnabled özelliğini devre dışı bırakın ve DispatchQueue.main.asyncAfter aracılığıyla yeniden etkinleştirin. Web uygulamalarında, ilk tıklamadan sonra button öğesinde disabled bayrağını ayarlayın.

Uzun Tap nedir ve Tap'tan farkı nedir?

Uzun Tap (Uzun Basma), hareket etmeden parmağı 500+ ms ekranda tutmaktır. Tap hızlı bir dokunmadır (100–300 ms). Tap ana eylemi gerçekleştirir, Uzun Tap ikincil bir eylemi (bağlam menüsü, düzenleme) gerçekleştirir. iOS'ta Tap, UITapGestureRecognizer tarafından, Uzun Basma ise UILongPressGestureRecognizer tarafından işlenir. Android'de — setOnClickListener vs setOnLongClickListener.

Apple Pencil ve S Pen kalemleri Tap'ı destekler mi?

Evet, kalemler Tap olarak işlenir standart dokunma API'si aracılığıyla. Apple Pencil kuvvet (basınç), altitudeAngle ve azimuth iletir. Android'de S Pen, MotionEvent.getPressure() ve getAxisValue(MotionEvent.AXIS_TILT) aracılığıyla benzer parametreler iletir. Kalemler için dokunma hedefini 24×24 noktaya düşürebilirsiniz çünkü kalemin doğruluğu parmaktan daha yüksektir.

Özet

  • Tap — hızlı dokunma jesti (100–300 ms), mobil arayüzlerin birincil eylemi
  • Uzun Basma'dan farkı — Tap'ın bekleme zaman aşımı yoktur ve anında yürütülür
  • iOS API — numberOfTapsRequired ve numberOfTouchesRequired ile UITapGestureRecognizer
  • Android API — View.setOnClickListener ve GestureDetector.OnDoubleTapListener
  • Çift Tap — yakınlaştırma ve beğeniler için 400 ms'ye kadar aralıklı ardışık iki Tap
  • Dokunma hedefi — minimum hedef boyutu 44×44 pt (iOS) veya 48×48 dp (Android)
  • Görsel geri bildirim — dokunma kaydını onaylamak için zorunlu

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.

Projeyi tartış

Ayrıca okuyun