Sobes.tech
Middle

Ekrana dokunduğumuzda sistemde ne oluyor?

sobes.tech yapay zeka

AI'dan gelen yanıt

Bir kullanıcı iOS cihazının ekranına dokunduğunda, aşağıdaki olaylar gerçekleşir:

  1. Olayın yakalanması: Donanım (dokunma denetleyicisi) dokunuşu kaydeder ve bir olay üretir.
  2. IOKit'te olay işleme: Cihaz sürücüsü IOKit'te dokunuş bilgilerini (koordinatlar, basınç kuvveti vb.) alır.
  3. Olayın SpringBoard'a gönderilmesi: IOKit, olayı sistem sürecine (SpringBoard) iletir.
  4. Olayın yönlendirilmesi: SpringBoard, aktif uygulamayı belirler ve IPC (İşlemlerarası İletişim) yoluyla bu uygulamaya gönderir.
  5. UIKit/SwiftUI'da olayın alınması: Uygulama, framework (UIKit veya SwiftUI) aracılığıyla olayı alır.
  6. Olayın kuyruğa eklenmesi: Olay, uygulamanın olay işleme kuyruğuna eklenir.
  7. Uygulama tarafından olayın alınması: Uygulamanın ana döngüsü (Run Loop), olay kuyruğundan olayı çeker.
  8. Olayın UIResponder aracılığıyla işlenmesi: Olay, UIEvent nesnesine iletilir. UIKit, genellikle UIWindow'den başlayarak olay teslimi sürecini başlatır.
  9. hitTest kontrolü: Sistem, dokunma noktasının altında kalan en üst ve etkileşimli UIView'yi belirler, hitTest(_:with:) metodunu kullanarak. Bu metod, görünüm hiyerarşisini rekürsif olarak dolaşır, noktanın sınırlar içinde olup olmadığını ve görünümün userInteractionEnabled olup olmadığını kontrol eder.
  10. Olayın teslimi: Olay, bulunan görünüme iletilir. Görünüm olayı işlemezse (örneğin, uygun bir jest yoksa veya touchesBegan:withEvent: uygulamışsa ama işlemezse veya hitTest nil dönerse), olay, zincirdeki bir sonraki responder'a (genellikle üst görünüm veya görünüm denetleyicisi) iletilir.
  11. Jestlerin veya dokunma metodlarının işlenmesi: Görünümde UIGestureRecognizer tanıyıcıları varsa, bunlar ilk olarak olayı alır. Bir jest tanındığında, ilgili Objective-C veya Swift fonksiyonu tarafından işlenir. Jestler olayı işlemezse veya yoksa, olay görünümün dokunma metodlarına (örneğin, touchesBegan(_:with:), touchesMoved(_:with:), touchesEnded(_:with:), touchesCancelled(_:with:)) iletilir.
  12. Mantığın yürütülmesi: Jest işleyicisi veya dokunma metodunda, kullanıcı tanımlı mantık (örneğin, UI durumunu değiştirme, gezinme, eylem gerçekleştirme) yürütülür.
  13. UI güncellemesi: Mantık, UI'da değişikliklere neden olursa, framework yeniden çizim isteği gönderir (gerekirse).

İşte bir düğmede dokunmayı işlemek için çok basitleştirilmiş bir mantık örneği:

// ViewController sınıfı veya başka bir UIResponder içinde
@IBAction func buttonTapped(_ sender: Any) {
    // Düğmeye basıldığında yürütülen mantık
    print("Düğmeye basıldı!")
}

touchesBegan kullanımına örnek (basit dokunuşlar için daha az yaygın):

// UIView'den türeyen özel bir görünümde
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    // İlk dokunuşu al
    guard let touch = touches.first else { return }

    // Dokunuş noktasını görünüm koordinatlarında al
    let location = touch.location(in: self)

    print("Ekran CGPoint: \(location) üzerinde dokunuldu")

    // super çağrılmazsa, zincirdeki sonraki responder işlemi durdurulur
    // super.touchesBegan(touches, with: event)
}