Чӣ гуна баландӣ ва паҳнои унсурҳои интерфейси корбар дар iOS ҳангоми ҳаракат тағйир меёбад?
sobes.tech AI
Ҷавоб аз AI
Дар иҷрои стандартӣ, баландӣ ва паҳнои элементҳои UIView дар вақти ҳаракат дар дохили UIScrollView ё фарзандони он (UITableView, UICollectionView) тағйир намеёбад.
Мақоми элементҳо (қимати хосияти frame.origin) нисбат ба bounds-и scroll view тағйир меёбад. Хусусияти bounds-и scroll view ҳангоми ҳаракат кардан ҳаракат мекунад, аммо андозаи он (bounds.size) боқӣ мемонад (баробар бо андозаи frame.size).
Андозаи мазмуни, ки метавонад ҳаракат кунад, бо хосияти contentSize-и scroll view муайян карда мешавад. Элементҳое, ки дар дохили contentSize ҷойгир шудаанд, ҳангоми ҳаракат кардан намоён хоҳанд шуд.
Тавре ки тағйироти андозаи элементҳо ҳангоми ҳаракат (эффекти параллакс ё фишурдан/тару тоза кардан) автоматӣ намебарояд ва талаб мекунад логикаи иловагӣ:
-
Иҷро дар
UIScrollViewDelegate: Назорат кардани тағйиротиcontentOffsetдар методиscrollViewDidScroll(_:)ва тағйир додани дастӣframeёbounds-и элементи зарурӣ.// Мисоли тағйир додани баландии элементи ҳангоми ҳаракат func scrollViewDidScroll(_ scrollView: UIScrollView) { let yOffset = scrollView.contentOffset.y let initialHeight: CGFloat = 200 let maxHeight: CGFloat = 300 // Мисол аз фишурдан дар поён, васеъ кардан дар боло let newHeight = max(0, min(maxHeight, initialHeight - yOffset)) someView.frame.size.height = newHeight // Ҳамоҳангсозии мақом агар анкор дар боло набошад } -
Истифодаи
UIVisualEffectView: Барои эффектҳои паршаванда ё вибрация, ки метавонанд дар вақти ҳаракат вобаста ба мазмуни зерини он тағйир ёбанд. -
Тарҳрезии махсус: Дар
UICollectionView, мумкин аст тарҳрезии махсусиUICollectionViewLayoutбарои идора кардани трансформатсияҳои ҳуҷраҳо ҳангоми ҳаракат. -
Анимацияҳо: Истифодаи
UIViewPropertyAnimatorё механизмҳои дигар барои анимация, ки дар посух ба ҳодисаи ҳаракат оғоз мешаванд.
Бинобар ин, рафтори асосӣ — андозаи доимӣ. Ҳар гуна тағйироти андоза натиҷаи иҷрои махсус мебошанд.