Middle
İstifadəçinin qatlama (layer) üzərinə klik edib-etmədiyini necə müəyyən etmək olar?
sobes.tech Süni İntellekt
AI-dan cavab
Toxunma testindən istifadə etmək mümkündür: dəqiq olaraq hansı qatlamda toxunuş baş verdiyini müəyyən etmək. Core Animation bunun üçün iki metod təqdim edir:
-
hitTest(_:):- Nöqtənin qatlamın sərhədləri daxilində və ya onun alt qatlamlarından hər hansı birində olub-olmadığını yoxlayır.
- Nöqtəni ehtiva edən ən dərin alt qatlamı (və ya qatlamı özü) qaytarır.
isHidden = true-i nəzərə alır.
-
contains(_:):- Yalnız nöqtənin qatlamın sərhədləri daxilində olub-olmadığını yoxlayır.
- Alt qatlamların hierarxiyasını nəzərə almır.
isHidden-i nəzərə alır.
Əksər hallarda, interaktivliyi müəyyən etmək üçün hitTest istifadə olunur, çünki daha dəqiqdir.
hitTest-in istifadəsinə nümunə:
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
guard let touch = touches.first else { return }
let locationInView = touch.location(in: view)
// Nöqtəni view koordinatlarından qatlam koordinatlarına çeviririk
let locationInLayer = myLayer.convert(locationInView, from: view.layer)
// Hit test həyata keçiririk
if let hitLayer = myLayer.hitTest(locationInLayer) {
if hitLayer === myLayer {
// Dəqiq olaraq myLayer-ə toxundu
print("myLayer-ə toxunuldu")
} else {
// myLayer daxilində alt qatlama toxundu
print("myLayer daxilində alt qatlama toxundu")
// Alt qatlamın identifikasiyası əlavə yoxlamalar tələb edə bilər
}
} else {
// myLayer və onun alt qatlamları xaricində toxundu
print("myLayer-dən kənarda toxundu")
}
}
Vacib nöqtələr:
- Toxunma nöqtəsinin koordinatları (
location(in:)) həmişəUIView-ə bağlıdır. Onları qatlamın koordinat sisteminə çevirmək lazımdır (convert(_, from:)və yaconvert(_, to:)). hitTest(_:)metodu çağıran qatlamın koordinat sistemində işləyir (myLayer.hitTest(locationInLayer)).- Əgər qatlam görünməzdirsə (
alpha = 0və yaisHidden = true),hitTestnilqaytaracaq.containsisə, görünməzliyi nəzərə almadan, nöqtənin sərhədlər daxilində olub-olmadığını yoxlayır. - Kompleks qatlam hierarxiyaları üçün, rekursiv axtarış və ya qaytarılan
hitLayer-in yoxlanması lazım ola bilər.