#ios #swift #animation #transform
#iOS #swift #Анимация #преобразование
Вопрос:
Я пытаюсь получить доступ и анимировать различные параметры для своих кнопок. Они по умолчанию установлены в Interface Builder с установленным размером шрифта, выравниванием и вставками, и я хотел бы получить доступ к этим параметрам и изменить их с помощью анимации при срабатывании кнопки: когда моя кнопка не нажата (по умолчанию), ее заголовок имеет меньший размер шрифта, он выравниваетсявнизу слева и с некоторыми вставками заголовка; когда я нажимаю на него, я хочу, чтобы шрифт был больше, установите для вставок значение 0 и выравнивание по центру (как по горизонтали, так и по вертикали), и этот переход будет анимирован.
Как мне создать функцию для доступа и анимации этих параметров?
@IBOutlet weak var circlePad: UIButton!
@IBAction func padPressed(_ sender: UIButton) {
animatePadTitle(circlePad)
}
func animatePadTitle(button: UIButton) {
// not sure how to tackle this here, do I use something like button.transform = CGAffineTransform ?
}
Спасибо
РЕДАКТИРОВАТЬ: я попытался еще немного поработать с параметрами и «обновил» свою функцию до этого :
func animatePadTitle(button: UIButton, insetBottom: Int, insetLeft: Int, fontSize: CGFloat, alignVert: UIControl.ContentVerticalAlignment, alignHor: UIControl.ContentHorizontalAlignment) {
// button.transform = CGAffineTransform
button.titleEdgeInsets.bottom = CGFloat(insetBottom)
button.titleEdgeInsets.left = CGFloat(insetLeft)
button.contentVerticalAlignment = alignVert
button.contentHorizontalAlignment = alignHor
button.titleLabel?.font = UIFont(name: fontName, size: fontSize)
}
Теперь вопрос в том, как анимировать переход между этими параметрами каждый раз, когда я нажимаю на кнопку?
Я установил bool, чтобы проверить, горит ли панель, и в условии if я написал свою функцию с разными параметрами, и изменения происходят, просто они резкие, и я бы хотел, чтобы они были более плавными.
Ответ №1:
Вы можете использовать функцию масштабирования CGAffineTransform для увеличения или уменьшения общих границ кнопки, включая заголовок.
Для увеличения использования> 1, Для уменьшения использования < 1
@objc func animatePadTitle() {
UIView.animate(withDuration: 0.15,
animations: { [weak self] in
guard let self = self else { return }
self.circlePad.transform = CGAffineTransform(scaleX: 1.1, y: 1.1)
},
completion: { _ in
UIView.animate(withDuration: 0.15) {
self.circlePad.transform = CGAffineTransform.identity
}
})
}
Комментарии:
1. спасибо, Пратиш, но в моем случае это немного сложнее: у меня есть фоновое изображение для моих кнопок, и я делаю так, чтобы заголовок отображался в левом нижнем углу этого фонового изображения по умолчанию мелким шрифтом, затем, когда я нажимаю на свою кнопку, заголовок увеличиваетсяи по центру, с удаленными вставками. Я установил вставки, потому что есть также мое фоновое изображение, которое меняется при нажатии кнопки, и поскольку я создал неоморфный дизайн, чтобы он сливался с фоном моего представления, мне понадобились некоторые вставки для заголовка 2 изображений, в противном случае выравнивание по левому краю казалось не в кадре
2. поэтому, если я масштабирую общую кнопку, она также масштабирует мои фоновые изображения; кроме того, у меня есть другая кнопка в моем контроллере просмотра, которая запускает изображения вместо текста на кнопках моей панели; так что, если я сделаю это по-вашему, изображения также будут масштабироваться при их запуске, я думаю. Поэтому я думаю, что в моем случае, поскольку мои кнопки «сложные», это все испортит, если я масштабирую общий фрейм, я надеялся, что есть способ просто плавно анимировать переходы значений, установленных для моих вставок, размера шрифта и выравнивания.
3. Надеюсь, вы пробовали устанавливать вставки в блоке анимации. Это сработало?