缩小按钮的宽度与动画问题

时间:2016-11-24 06:22:08

标签: ios swift uiviewanimation

我想在我的项目中复制这个动画

enter image description here

所以我尝试的是:

  1. 转换比例X ..但问题是它还缩小了按钮的标题。

    self.transform = CGAffineTransform.identity
    UIView.animate(withDuration: duration, delay: delayTime,
                   usingSpringWithDamping: 0.7,
                   initialSpringVelocity: 0.7,
                   options: [.curveEaseIn],
                   animations: {
                    self.transform = CGAffineTransform(scaleX: 0.5, y: 1.0)
        }, completion: nil)
    

    这就是它给出的(按钮标题也缩小)

    enter image description here

  2. 使用CASpringAnimation

    let shrinkAnim = CASpringAnimation(keyPath: "bounds.size.width")
    shrinkAnim.damping = 0.7
    shrinkAnim.initialVelocity = 0.7
    shrinkAnim.fromValue = frame.width
    shrinkAnim.toValue = width
    shrinkAnim.dura[![enter image description here][3]][3]tion = duration
    shrinkAnim.timingFunction = getTimingFunction(curve: curve)
    shrinkAnim.fillMode = kCAFillModeForwards
    shrinkAnim.isRemovedOnCompletion = false
    layer.add(shrinkAnim, forKey: shrinkAnim.keyPath)
    

    因此它可以改变标题的宽度和位置  enter image description here

  3. 所以我的问题是出了什么问题或者我需要添加什么来复制第一张图片?

      

    我对按钮的约束固定在左边,右边和底边并固定高度。更多的事情是我正在为此做一个类,所以我不能改变常量,因为我必须在许多屏幕中使用它..所以我想要一站式解决方案。

4 个答案:

答案 0 :(得分:1)

将您的按钮放在UIView

您的视图树将如下所示

Superview> UIView>按钮

通过这样做,您现在可以使用按钮可以遵循的固定宽度尺寸,即uiview

看起来像这样

https://feedback.azure.com/forums/34192--general-feedback

View in a superview

Button Constraints Left Contraint

然后使用

制作动画
//let's say the current left and right constraint are 8

leftConstraint.constant = 50
rightConstraint.constant = 50
UIView.animate ... {
    self.view.layoutIfNeeded()
}

通过使用此功能,您只需将UIView的画面设置为所需的画面并按下按钮,您的动画就会与您编码的方式成比例设置<\ n / p>

//let's say the current left and right constraint are 8

// get view frame

...

// calculate distance

var calculatedDistance = ......

// set distance
let distanceToAnimate = calculatedDistance

leftConstraint.constant = distanceToAnimate
rightConstraint.constant = distanceToAnimate
UIView.animate ... {
    self.view.layoutIfNeeded()
}

答案 1 :(得分:0)

请勿使用Javascript,而是使用按钮CGAffineTransform的{​​{1}}属性出口,并在动画块/闭包内更改其NSLayoutConstraint

width

答案 2 :(得分:0)

您是否尝试过内容内容拥抱和抗压缩性。你可以试试下面的最高优先级吗? enter image description here

答案 3 :(得分:0)

在按钮的框架上应用变换。当您在动画中缩放UIView时,它不会考虑子视图/布局,它只会统一缩放所绘制的内容。

self.transform = CGAffineTransform.identity
UIView.animate(withDuration: duration, delay: delayTime,
               usingSpringWithDamping: 0.7,
               initialSpringVelocity: 0.7,
               options: [.curveEaseIn],
               animations: {
                self.frame = CGRectMake(<#CGFloat x#>, <#CGFloat y#>, <#CGFloat width#>, <#CGFloat height#>)
    }, completion: nil)