Sobes.tech
Middle

Ekranga bosganimizda tizimda nima bo'ladi?

sobes.tech AI

AIdan javob

Foydalanuvchi iOS qurilmasining ekraniga teganda, quyidagilar bo'ladi:

  1. Voqeani yozib olish: Qurilma (touch controller) tegishni ro'yxatga oladi va voqea yaratadi.
  2. IOKitda voqeani qayta ishlash: Qurilma drayveri IOKitda tegish ma'lumotlarini (koordinatalar, bosim kuchi va boshqalar) oladi.
  3. Voqeani SpringBoardga yuborish: IOKit voqeani tizim jarayoniga (SpringBoard) uzatadi.
  4. Voqeani yo'naltirish: SpringBoard faol bo'lgan ilovani aniqlaydi va IPC (Inter-Process Communication) orqali unga voqeani yuboradi.
  5. UIKit/SwiftUIda voqeani qabul qilish: Ilova framework (UIKit yoki SwiftUI) orqali voqeani oladi.
  6. Voqeani navbatga qo'shish: Voqea ilovaning voqealarni qayta ishlash navbatiga qo'shiladi.
  7. Ilova tomonidan voqeani qabul qilish: Ilovaning asosiy sikli (Run Loop) voqeani navbatdan oladi.
  8. Voqeani UIResponder orqali qayta ishlash: Voqea UIEvent ob'ektiga uzatiladi. UIKit odatda UIWindowdan boshlanadigan voqeani yetkazish jarayonini boshlaydi.
  9. hitTest tekshiruvi: Tizim tegish nuqtasining ostidagi eng yuqori va interaktiv UIViewni aniqlaydi, hitTest(_:with:) metodidan foydalanib. Bu metod rekursiv tarzda ko'rinishlar hierarxiyasini o'tib, nuqtaning chegaralar ichida ekanligini va ko'rinish userInteractionEnabled holatda ekanligini tekshiradi.
  10. Voqeani yetkazish: Voqea topilgan ko'rinishga yetkaziladi. Agar ko'rinish voqeani ishlamasa (masalan, mos gest yoki touchesBegan:withEvent: ni amalga oshirmagan yoki hitTestda nil qaytarsa), voqea navbatdagi responderga (odatda, superview yoki view controller) o'tkaziladi.
  11. Gestlar yoki tegish metodlarini ishlash: Agar ko'rinishda UIGestureRecognizer tanib oluvchilar bo'lsa, ular avval voqeani oladi. Agar gest tan olinsa, u Objective-C yoki Swift funksiyasi orqali ishlanadi. Agar gestlar voqeani ishlamasa yoki mavjud bo'lmasa, voqea ko'rinishning tegish metodlariga o'tkaziladi (touchesBegan(_:with:), touchesMoved(_:with:), touchesEnded(_:with:), touchesCancelled(_:with:)).
  12. Mantiqni bajarish: Gest yoki tegish metodida, foydalanuvchi tomonidan belgilangan mantiq bajariladi (masalan, UI holatini o'zgartirish, navigatsiya qilish, harakatni bajarish).
  13. UIni yangilash: Agar mantiq UIda o'zgarishlarga olib kelsa, framework qayta chizish so'rovini yuboradi (zarur bo'lsa).

Mana tugma ustiga tegishni boshqarish uchun juda soddalashtirilgan mantiq misoli:

// ViewController yoki boshqa UIResponder ichida
@IBAction func buttonTapped(_ sender: Any) {
    // Tugma bosilganda bajariladigan mantiq
    print("Tugma bosildi!")
}

touchesBegandan foydalanish misoli (oddiy tegishlar uchun kamroq tarqalgan):

// UIView dan meros olgan maxsus ko'rinishda
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    // Birinchi tegishni olish
    guard let touch = touches.first else { return }

    // Tegish nuqtasini ko'rinish koordinatalarida olish
    let location = touch.location(in: self)

    print("Ekran CGPoint: \(location) da tegildi")

    // Super chaqirilmasa, keyingi responder zanjiri to'xtatiladi
    // super.touchesBegan(touches, with: event)
}