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:
- Olayın yakalanması: Donanım (dokunma denetleyicisi) dokunuşu kaydeder ve bir olay üretir.
- IOKit'te olay işleme: Cihaz sürücüsü IOKit'te dokunuş bilgilerini (koordinatlar, basınç kuvveti vb.) alır.
- Olayın SpringBoard'a gönderilmesi: IOKit, olayı sistem sürecine (SpringBoard) iletir.
- Olayın yönlendirilmesi: SpringBoard, aktif uygulamayı belirler ve IPC (İşlemlerarası İletişim) yoluyla bu uygulamaya gönderir.
- UIKit/SwiftUI'da olayın alınması: Uygulama, framework (UIKit veya SwiftUI) aracılığıyla olayı alır.
- Olayın kuyruğa eklenmesi: Olay, uygulamanın olay işleme kuyruğuna eklenir.
- Uygulama tarafından olayın alınması: Uygulamanın ana döngüsü (Run Loop), olay kuyruğundan olayı çeker.
- Olayın UIResponder aracılığıyla işlenmesi: Olay,
UIEventnesnesine iletilir. UIKit, genellikleUIWindow'den başlayarak olay teslimi sürecini başlatır. - 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ünuserInteractionEnabledolup olmadığını kontrol eder. - 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 veyahitTestnil dönerse), olay, zincirdeki bir sonraki responder'a (genellikle üst görünüm veya görünüm denetleyicisi) iletilir. - Jestlerin veya dokunma metodlarının işlenmesi: Görünümde
UIGestureRecognizertanı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. - 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.
- 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)
}