Swift: анимация параметров кнопок (вставка, размер шрифта и т. Д.)

#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. Надеюсь, вы пробовали устанавливать вставки в блоке анимации. Это сработало?