ios - 使用动画减少 View 的宽度

标签 ios swift animation

大家好,我遇到了一个奇怪的问题。我想在单击带有动画的按钮时增加 View 的宽度,这在我的情况下工作正常。我用来增加宽度的代码如下-

    @IBAction func increaseWidth(_ sender: AnyObject) {

      UIView.animate(withDuration: 1.0, delay: 0, options:
       [.allowUserInteraction], animations: {

            print("Animation function animateStuff() started!")

            let frmPlay : CGRect = self.nameLbl.frame
            let originXbutton = frmPlay.origin.x
            let originYbutton = frmPlay.origin.y
            let originWidthbutton = frmPlay.size.width
            let originHeightbutton = frmPlay.size.height

           self.nameLbl.frame =  CGRect(origin: CGPoint(x: originXbutton,y :originYbutton), size: CGSize(width: originWidthbutton+100, height: originHeightbutton))


        }, completion: { finished in

    })
}

但是我使用的代码并没有通过动画减少宽度。它只是在减少宽度。用于减少宽度的代码如下-

@IBAction func decreaseWidth(_ sender: AnyObject) {


    UIView.animate(withDuration: 1.0, delay: 0, options:
        [.allowUserInteraction], animations: {

            print("Animation function animateStuff() started!")

            let frmPlay : CGRect = self.nameLbl.frame
            let originXbutton = frmPlay.origin.x
            let originYbutton = frmPlay.origin.y
            let originWidthbutton = frmPlay.size.width
            let originHeightbutton = frmPlay.size.height

            // self.nameLbl.frame = frmPlay
            self.nameLbl.frame =  CGRect(origin: CGPoint(x: originXbutton,y :originYbutton), size: CGSize(width: originWidthbutton-100, height: originHeightbutton))



        }, completion: { finished in

    })

}

请帮助我哪里出错了。

最佳答案

你可以简单地使用CALayer来实现这个动画。试试下面的方法。

func scaleX() {

    let animation = CABasicAnimation(keyPath: "transform.scale.x")
    animation.fromValue = NSValue(cgSize: CGSize(width: 1, height: 1))
    animation.toValue = NSValue(cgSize: CGSize(width: 1.2, height: 1)) 
    animation.duration = 1.0
    self.imageView.layer.add(animation, forKey: "Image-scale")
    imageView.transform = CGAffineTransform(scaleX: 1.2, y: 1.0)

}

func reset() {

    UIView.animate(withDuration: 1) { 
          self.imageView.transform = CGAffineTransform.identity
    }

}

注意:我正在使用 imageView 来测试动画。您可以分配您的 view 来执行动画。

更新:

我建议您通过更改框架内容大小来使用基本的 UIView 动画。试试下面的方法。

 override func viewDidAppear(_ animated: Bool) {
    //To restrict animation repeats.
    resetButton.isEnabled = false
    resetButton.showsTouchWhenHighlighted = true
    scaleButton.showsTouchWhenHighlighted = true 
 }


func scaleX() {

     resetButton.isEnabled = true
     scaleButton.isEnabled = false  
    UIView.animate(withDuration: 1) { 
        self.imageView.frame = CGRect(x: self.imageView.frame.origin.x, y: self.imageView.frame.origin.y, width: self.imageView.frame.width + 100, height: self.imageView.frame.height)
   }
}

func reset() {

    resetButton.isEnabled = false
    scaleButton.isEnabled = true 
    UIView.animate(withDuration: 1) {    
    self.imageView.frame = CGRect(x: self.imageView.frame.origin.x, y: self.imageView.frame.origin.y, width: self.imageView.frame.width  - 100, height: self.imageView.frame.height)       
 }

 }

输出:

enter image description here

关于ios - 使用动画减少 View 的宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41163117/

相关文章:

swift - 从一个 UIStoryBoard Controller 切换到另一个 UIStoryBoard Controller

javascript - 多个动画之间的 CSS 动画进度

iphone - 如何做一个连续回收UIView动画

ios - 如何在 iOS 图表中简化突出显示动画

ios - 访问 UITabBarController 以通过 Storyboards 分配 Action

ios - Firebase 中的快照。如何深入挖掘快照

ios - 释放对象观察到的 NSNotification

ios - Swift WHOLE_MODULE_OPTIMIZATION 改进了编译时间,但导致 lldb/Xcode 崩溃

ios - 在 swift 中创建收藏按钮的核心数据关系

ios - WatchKit:什么是 "Kermit",这个控制台日志语句是什么意思?