Middle
Ինչպե՞ս կարելի է որոշել, որ օգտատերը սլայդին (layer) սեղմել է։
sobes.tech AI
Պատասխան AI-ից
Можна выкарыстоўваць тэставанне ўдару: вызначыць, у які менавіта слой трапіла дакрананне. Core Animation прапануе два метады для гэтага:
-
hitTest(_:):- Правярае, ці знаходзіцца кропка ўнутры межаў слоя або любога з яго падслояў.
- Вяртае самы глыбокі падслой (ці сам слой), які ўтрымлівае кропку.
- Улічвае
isHidden = true.
-
contains(_:):- Правярае толькі, ці знаходзіцца кропка ў межах самога слоя.
- Не ўлічвае іерархію падслояў.
- Не ўлічвае
isHidden.
Звычайна выкарыстоўваецца hitTest, бо ён больш дакладны для вызначэння інтэрактыўнасці.
Прыклад выкарыстання hitTest у апрацоўшчыку дакрананняў:
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
guard let touch = touches.first else { return }
let locationInView = touch.location(in: view)
// Пераўтвараем кропку з каардынат view у каардынаты слоя
let locationInLayer = myLayer.convert(locationInView, from: view.layer)
// Выконваем hit test
if let hitLayer = myLayer.hitTest(locationInLayer) {
if hitLayer === myLayer {
// Дакрануліся менавіта да myLayer
print("Націснулі на myLayer")
} else {
// Дакрануліся да падслоя ўнутры myLayer
print("Націснулі на падслой унутры myLayer")
// Ідэнтыфікацыя падслоя можа патрабаваць дадатковых праверак
}
} else {
// Дакрануліся ўнеў myLayer і яго падслояў
print("Націснулі ўнеў myLayer")
}
}
Важныя моманты:
- Каардынаты кропкі дакранання (
location(in:)) заўсёды звязаны зUIView. Неабходна пераўтварыць іх у сістэму каардынат слоя (convert(_, from:)абоconvert(_, to:)). - Метад
hitTest(_:)працуе з кропкамі ў сістэме каардынат выклікаючага слоя (myLayer.hitTest(locationInLayer)). - Калі слой не бачны (
alpha = 0абоisHidden = true),hitTestвернеnil.containsвернеtrue, калі кропка ўнутры межаў, ігнаруючы бачнасць. - Для складанай іерархіі слояў можа спатрэбіцца рэкурсіўны пошук або праверка вяртанага
hitLayer.