Middle
Kā noteikt, vai lietotājs ir noklikšķinājis uz slāņa (layer)?
sobes.tech AI
Atbilde no AI
Var izmantot hit testing: noteikt, uz kuru slāni ir nonācis pieskāriens. Core Animation piedāvā divas metodes šim nolūkam:
-
hitTest(_:):- Pārbauda, vai punkts atrodas slāņa robežās vai jebkura tā apakšslāņa iekšienē.
- Atgriež visdziļāko apakšslāni (vai pašu slāni), kas satur punktu.
- Ņem vērā
isHidden = true.
-
contains(_:):- Pārbauda tikai, vai punkts ir paša slāņa robežās.
- Negalvo hierarhiju.
- Negalvo
isHidden.
Parasti tiek izmantots hitTest, jo tas ir precīzāks interaktivitātes noteikšanā.
Piemērs, kā izmantot hitTest pieskāriena apstrādē:
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
guard let touch = touches.first else { return }
let locationInView = touch.location(in: view)
// Pārvērš punktu no `UIView` koordinātām uz slāņa koordinātām
let locationInLayer = myLayer.convert(locationInView, from: view.layer)
// Veikt hit test
if let hitLayer = myLayer.hitTest(locationInLayer) {
if hitLayer === myLayer {
// Pieskāriens tieši uz myLayer
print("Nospieda uz myLayer")
} else {
// Pieskāriens uz apakšslāņa iekšienē
print("Nospieda uz apakšslāņa")
// Apakšslāņa identifikācija var prasīt papildu pārbaudes
}
} else {
// Pieskāriens ārpus myLayer un tā apakšslāņiem
print("Nospieda ārpus myLayer")
}
}
Svarīgi punkti:
- Pieskāriena punkta koordinātas (
location(in:)) vienmēr ir saistītas arUIView. Tās ir jākonvertē uz slāņa koordinātu sistēmu (convert(_, from:)vaiconvert(_, to:)). hitTest(_:)metode darbojas ar punktiem slāņa koordinātu sistēmā (myLayer.hitTest(locationInLayer)).- Ja slānis ir neredzams (
alpha = 0vaiisHidden = true),hitTestatgriezīsnil.containsatgriezīstrue, ja punkts ir iekšā robežās, ignorējot redzamību. - Sarežģītākai hierarhijai var būt nepieciešama rekursīva meklēšana vai pārbaude ar atgriezto
hitLayer.