Киргизүү ишин токтоткандан кийин активдүүлүк көрсөткүчү эмне үчүн иштеп жатат?
sobes.tech AI
AIден жооп
Иштироктунун себеби — iOS 11ден мурун iOSто активдүүлүк көрсөткүчү (UIActivityIndicatorView) анимацияны уланта берген, эгер анын stopAnimating() методу чакырылган болсо да, бирок өзү көрүнүштүк контроллери же анын ата-энеси контроллери толугу менен эс тутумдан чыгарылбаган. Көрсөткүч жай гана визуалдык түрдө көрүнбөй калат, бирок анын ички абалы "аниматор" бойдон калат.
iOS 11ден кийин, бул жүрүм-турум өзгөрдү. Эми stopAnimating() чын эле анимацияны токтотуп, көрсөткүчтүн ички абалын өзгөртөт.
Эски iOS версиялары же кодуңузда мүмкүн болгон каталар жөнүндө айтканда, себеп төмөнкүлөр болушу мүмкүн:
- VCнин жашоо циклинин маселеси:
stopAnimating()бардык зарыл болгон жашоо цикли абалдарында чакырылбайт (мисалы, onlyviewWillDisappearичинде, бирокviewDidDisappearже ката иштетүүдө эмес). - Объектти туура эмес башкаруу: Көрсөткүч эс тутумда сакталууда жана анын абалы кайра калыбына келтирилбейт, эгер ал туура эмес чыгарылбаса же ага күчтүү шилтемелер бар болсо, алар чыгарылууга тоскоол болот.
- Көптөгөн агымдардагы каталар:
stopAnimating()негизги агымда чакырылат, ал эми UI элементтеринин анимацияларын гана негизги агымда башкарууга болот:
// Туура чакыруу негизги агымда
DispatchQueue.main.async {
activityIndicator.stopAnimating()
}
- Көрсөтүүнүн шынжыр маселеси: Көрсөткүчтү камтыган көрүнүш алынып салынган эмес же толугу менен жашырылган эмес:
// Алынган көрүнүштүн мисалы
activityIndicator.removeFromSuperview()
// Жашырган көрүнүш
activityIndicator.isHidden = true
- Auto Layout менен иштөөдө каталар: Көрсөткүч орунду ээлей берет же анын өлчөмдөрү анимация токтотулгандан кийин кайра калыбына келбейт, бул активдүүлүк же катышуу иллюзиясын түзөт.
Азыркы iOS версияларында мындай көйгөйлөр сейрек кездешет жана көбүнесе объекттердин жашоо циклинин башкаруу же көптөгөн агымдардагы каталар менен байланыштуу болот.