Middle
Kā noteikt, vai lietotājs ir nospiedis slāni (layer) lietotnē?
sobes.tech AI
Atbilde no AI
Nosakot pieskārienu uz CALayer, jūs varat izmantot vairākus pieejas veidus:
-
Izmantot
hitTest(_:event:)skatā (View):UIViewir metodehitTest(_:with:), kas rekursīvi pārbauda apakšskatāru hierarhiju un atgriež visdziļāko apakšskatāru, kas ietver norādīto punktu:- Šī metode pēc noklusējuma ņem vērā ar skatījumu saistītos slāņus:
- Jūs varat pārdefinēt
hitTest(_:with:)savā pielāgotajā skatā, lai iegūtu detalizētāku kontroli vai tieši apstrādātu pieskārienus zemākajos slāņos, kas nav saistīti ar skatījumiem:
-
Koordinātu pārveidošana ar
convert:- Kad saņemat pieskāriena notikumu (piemēram,
UIViewmetodēs), jums ir koordinātas, kas attiecas uz logu (UIWindow) vai skatu: - Lai noteiktu, vai pieskāriens ir kritis konkrētā slānī, ir jāveic šo koordinātu pārveidošana uz šī slāņa koordinātu sistēmu:
- Tam tiek izmantotas
convert(_:from:)vaiconvert(_:to:)metodesCALayer: - Pēc pārveidošanas var pārbaudīt, vai iegūtais punkts atrodas slāņa robežās (
bounds) vai izmantot specifiskākas pārbaudes, piemēram,contains(_:):
- Kad saņemat pieskāriena notikumu (piemēram,
-
UITapGestureRecognizerpievienošana skata līmenī:- Var pievienot
UITapGestureRecognizerpieskāriena žestam tamUIView, kas ir saistīts ar slāni: - Apstrādes laikā saņemiet pieskāriena atrašanās vietu attiecībā uz skatu:
- Tad izmantojiet koordinātu pārveidošanas pieeju (daļa 2), lai pārbaudītu, vai punkts ir norādītā slāņa vai tā apakšslāņu iekšienē:
- Var pievienot
-
Izveidot
UIViewkatram interaktīvajam slānim:- Ja jums ir slāņi, kuriem jābūt interaktīviem, vienkāršākais veids ir izveidot katram atbilstošu
UIView: - Novietot un iestatīt
UIViewizmēru atbilstoši slānim: - Pievienot žestu apstrādes funkcijas (
UITapGestureRecognizer) vai pārdefinēt pieskāriena notikumu apstrādes metodes (touchesBegan,touchesEndedutt.) šajā skatā: - Tas ir vispiemērotākais veids, kā apstrādāt lietotāja ievadi UIKit vidē, jo
UIViewir īpaši paredzēts tam.
- Ja jums ir slāņi, kuriem jābūt interaktīviem, vienkāršākais veids ir izveidot katram atbilstošu
Piemērs, izmantojot hitTest UIView iekšienē:
// Pielāgotā `UIView`
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
// Pārveidot pieskāriena punktu uz apakšslāņa koordinātām
let pointInLayer = mySublayer.convert(point, from: layer!)
// Pārbaudīt, vai punkts atrodas apakšslāņa robežās
if mySublayer.contains(pointInLayer) {
// Ja punkts ir apakšslānī, varat atgriezt sevi vai citu skatu,
// vai veikt nepieciešamās darbības:
print("Piespiests uz mySublayer")
// Varat atgriezt nil, ja nevēlaties, lai šis skats turpina apstrādi,
// vai `super.hitTest(point, with: event)` ja vēlaties saglabāt standarta uzvedību
}
// Atļaut standarta `hitTest` apstrādāt pārējos gadījumus
return super.hitTest(point, with: event)
}
Piemērs, izmantojot koordinātu pārveidošanu žestā:
// Pielāgotā `UIView` ar pievienotu `UITapGestureRecognizer`
@objc func handleTap(_ sender: UITapGestureRecognizer) {
let tapLocationInView = sender.location(in: self)
// Pārveidot pieskāriena punktu no skata koordinātām uz apakšslāņa koordinātām
let tapLocationInSublayer = mySublayer.convert(tapLocationInView, from: layer!)
// Pārbaudīt, vai punkts ir apakšslāņa robežās
if mySublayer.contains(tapLocationInSublayer) {
print("Piespiests uz mySublayer")
// Veikt darbības, kas saistītas ar pieskārienu uz apakšslāņa
}
}