Ինչու է ակտիվության ցուցիչը շարունակվում է աշխատել ծրագրի փակելուց հետո:
sobes.tech AI
Պատասխան AI-ից
Ինքնագործության պատճառը այն է, որ iOS 11-ից առաջ iOS-ում ակտիվության ցուցիչը (UIActivityIndicatorView) շարունակել է անիմացիան, նույնիսկ եթե նրա stopAnimating() մեթոդը եղել է կանչված, բայց ինքնին տեսողական կոնտրոլը կամ նրա ծնողական կոնտրոլը ամբողջությամբ չեղյալ է հայտարարվել հիշողությունից։ Ցուցիչը պարզապես դադարել է տեսողականորեն ցուցադրվել, բայց նրա ներքին վիճակը մնացել է "անիմացիոն"։
Ինքնագործության փոփոխությունից հետո, iOS 11-ից հետո, stopAnimating() իրականում դադարեցնում է անիմացիան և փոխում է ցուցիչի ներքին վիճակը։
Եթե խոսենք հին iOS տարբերակների կամ կոդում հնարավոր սխալների մասին, ապա պատճառը կարող է լինել հետևյալը:
- VC-ի կյանքի ցիկլի խնդիր:
stopAnimating()կանչվում է ոչ բոլոր անհրաժեշտ կյանքի ցիկլի վիճակներում (օրինակ, միայնviewWillDisappear-ում, բայց ոչviewDidDisappear-ում կամ սխալների մշակման ժամանակ): - Օբյեկտի սխալ կառավարում: Ցուցիչը շարունակում է գոյություն ունենալ հիշողության մեջ և նրա վիճակը չի վերականգնվում, եթե այն չի դեալոկացվում պատշաճ կերպով կամ եթե կան ուժեղ հղումներ, որոնք խոչընդոտում են դեալոկացիային:
- Բազմապատկման սխալներ:
stopAnimating()կանչվում է գլխավոր հոսքում, մինչդեռ UI տարրերի անիմացիաները կարելի է կառավարել միայն գլխավոր հոսքում:
// Ճիշտ կանչի օրինակ գլխավոր հոսքում
DispatchQueue.main.async {
activityIndicator.stopAnimating()
}
- Ներկայացումների շղթայի խնդիր: Ներկայացումը, որը պարունակում է ցուցիչը, չի հեռացվել սուպեր-համապատկերից կամ չի թաքցվել ամբողջությամբ:
// Հեռացման օրինակ սուպեր-համապատկերից
activityIndicator.removeFromSuperview()
// Թաքցման օրինակ
activityIndicator.isHidden = true
- Auto Layout-ի սխալներ: Ցուցիչը շարունակում է զբաղեցնել տարածք կամ նրա չափերը չեն վերականգնվում անիմացիայի դադարեցումից հետո, ստեղծելով ակտիվության կամ ներկայության տպավորություն:
Նոր iOS տարբերակներում նման խնդիրները հազվադեպ են հանդիպում և սովորաբար կապված են օբյեկտների կյանքի ցիկլի կառավարման կամ բազմապատկման սխալների հետ։