如何使用Swift将自定义视图从右到左,从左到右设置动画

时间:2017-08-08 10:59:48

标签: ios swift

我设计了一个视图。通常,当我单击按钮时,此视图将显示和隐藏。现在我试图用左到右和从右到左动画该视图。下面是我的代码,但它不起作用。请检查一下。

if(self.openedView) {
        self.openedView = false;
        UIView.animate(withDuration: 0.3, delay: 0.0, options: .curveEaseIn, animations: {() -> Void in



        }, completion: {(_ finished: Bool) -> Void in
        })

         shareMainView.isHidden = true;
    } else {
         self.openedView = true;
        UIView.animate(withDuration: 0.3, delay: 0.0, options: .curveEaseOut, animations: {() -> Void in
        }, completion: {(_ finished: Bool) -> Void in
            /*done*/
        })

        shareMainView.isHidden = false;
    }

shareMainView.isHidden = false;这是我的视图,它将通过动画打开并隐藏。

3 个答案:

答案 0 :(得分:0)

兄弟根据您发布的代码,您既不会改变shareMainView的框架,也不会改变它的任何约束。因此,尝试使用约束框架,如开放状态设置一些宽度(如150),并在动画块中将近设置宽度设置为0.0。

不要忘记在动画中的最后一个代码中使用shareMainView.layoutIfNeeded(),在完成块中使用shareMainView.isHidden = false。这将有助于正确显示动画。

答案 1 :(得分:0)

在视图中加载:

shareMainView.frame = CGRectMake(_aview.frame.origin.x, _aview.frame.origin.y, 0, _aview.frame.size.height);
点击按钮

if(self.openedView) {
        self.openedView = false;
        UIView.animate(withDuration: 0.3, delay: 0.0, options: .curveEaseIn, animations: {() -> Void in
        shareMainView.layoutIfNeeded()
        shareMainView.frame = CGRectMake(_aview.frame.origin.x, _aview.frame.origin.y, 200, _aview.frame.size.height);


        }, completion: {(_ finished: Bool) -> Void in
        })

         shareMainView.isHidden = true;
    } else {
         self.openedView = true;
        UIView.animate(withDuration: 0.3, delay: 0.0, options: .curveEaseOut, animations: {() -> Void in
        shareMainView.layoutIfNeeded()
        shareMainView.frame = CGRectMake(_aview.frame.origin.x, _aview.frame.origin.y, 0, _aview.frame.size.height);

        }, completion: {(_ finished: Bool) -> Void in
            /*done*/
        })

        shareMainView.isHidden = false;
    }

宽度可以与您想要扩展一样多。例如我有用户200.在视图中加载它是0然后200在扩展时再次0在折叠时。 希望它会有所帮助。

答案 2 :(得分:0)

extension UIView {
  func comingFromRight(containerView: UIView) {
    let offset = CGPoint(x: containerView.frame.maxX, y: 0)
    let x: CGFloat = 0, y: CGFloat = 0
    self.transform = CGAffineTransform(translationX: offset.x + x, y: offset.y + y)
    self.isHidden = false
    UIView.animate(
        withDuration: 1, delay: 0, usingSpringWithDamping: 0.47, initialSpringVelocity: 3,
        options: .curveEaseOut, animations: {
            self.transform = .identity
            self.alpha = 1
    })

} } 

你可以像这样使用它:

anyView.comingFromRight(containerView: anyView.superview)