Middle
Ի՞նչ է տեղի ունենում համակարգում, երբ մենք սեղմում ենք էկրանին։
sobes.tech AI
Պատասխան AI-ից
Երբ օգտվողը սեղմում է iOS սարքի էկրանին, տեղի է ունենում հետևյալը:
- Եվентиի ընդունում: Հատկոցը (touch controller) գրանցում է շոշափումը և ստեղծում է իրադարձություն:
- ԻՕԿիտում իրադարձության մշակումը: Սարքի վարորդը ստանում է շոշափման մասին տեղեկություններ (կոորդինատներ, ճնշման ուժ և այլն):
- Ինքնագործության փոխանցում SpringBoard-ին: ԻՕԿիտը փոխանցում է իրադարձությունը համակարգային գործընթացին՝ SpringBoard:
- Ինքնագործության ուղարկում: SpringBoard-ը որոշում է ակտիվ հավելվածը և ուղարկում է իրադարձությունը IPC (Inter-Process Communication) միջոցով այդ հավելվածին:
- Ինքնագործության ընդունում UIKit/SwiftUI-ում: Հավելվածում իրադարձությունը ընդունվում է ֆրեյմվորկից (UIKit կամ SwiftUI):
- Ինքնագործության հերթին ավելացում: Իրադարձությունը ավելացվում է հավելվածի իրադարձությունների մշակման հերթին:
- Ինքնագործության ընդունում: Հիմնական ցիկլը (Run Loop) քաշում է իրադարձությունը հերթից:
- Ինքնագործության մշակումը UIResponder-ի միջոցով: Իրադարձությունը փոխանցվում է
UIEventօբյեկտին: UIKit-ը սկսում է իրադարձության փոխանցման գործընթացը, սովորաբար սկսելովUIWindow-ից: - hitTest ստուգում: Սիստեմը որոշում է ամենաբարձր ինտերակտիվ
UIView-ը (կամ նրա համարժեքը SwiftUI-ում), որը գտնվում է շոշափման կետում, օգտագործելովhitTest(_:with:)մեթոդը (UIKit-ում): Այս մեթոդը ռեկուրսիվ անցնում է տեսքի հիերարխիան, ստուգելով, արդյոք կետը գտնվում է սահմանների ներսում և արդյոք տեսքը ակտիվ է: - Ինքնագործության փոխանցում: Իրադարձությունը փոխանցվում է հայտնաբերված տեսքին: Եթե տեսքը չի մշակել իրադարձությունը (օր., չունի համապատասխան ժեստ կամ իրականացնում է
touchesBegan:withEvent:բայց չի մշակել, կամhitTest-ում վերադարձնում էnil), ապա իրադարձությունը փոխանցվում է հաջորդ responder-ին (responder chain), սովորաբար superview կամ տեսքի վերահսկիչ: - Ժեստերի կամ շոշափման մեթոդների մշակումը: Եթե տեսքին կցված են
UIGestureRecognizer-ներ, նրանք առաջինը ստանում են իրադարձությունը: Եթե ժեստը ճանաչվում է, այն մշակվում է համապատասխան objc կամ Swift գործողությամբ: Եթե ժեստերը չեն մշակել իրադարձությունը կամ բացակայում են, ապա իրադարձությունը փոխանցվում է տեսքի շոշափման մեթոդներին (touchesBegan(_:with:),touchesMoved(_:with:),touchesEnded(_:with:),touchesCancelled(_:with:)): - Լոգիկայի կատարմամբ: Ժեստի կամ շոշափման մեթոդում կատարվում է օգտվողի տրամաբանական գործառույթը (օր., UI վիճակի փոփոխություն, նավիգացիա, գործողության կատարում):
- UI-ի թարմացում: Եթե տրամաբանական գործառույթը հանգեցնում է UI- ի փոփոխությունների, ֆրեյմվորկը ուղարկում է վերանվագրման հարցում (եթե անհրաժեշտ է):
Ահա շատ պարզ օրինակ շոշափման մշակման՝ կոճակի օպերատորում:
// ViewController կամ այլ UIResponder-ի ներսում
@IBAction func buttonTapped(_ sender: Any) {
// Լոգիկա, որը կատարվում է կոճակի սեղմման ժամանակ
print("Կոճակը սեղմվեց!")
}
touchesBegan-ի օգտագործման օրինակ (պակաս տարածված պարզ շոշափումների համար):
// UIView-ից ժառանգվող անհատական տեսք
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
guard let touch = touches.first else { return }
let location = touch.location(in: self)
print("Էկրանին շոշափվել է CGPoint: \(location)")
// Եթե super-ին չզանգահարեք, հաջորդ responder-ների մշակումը կդադարեցվի
// super.touchesBegan(touches, with: event)
}