我设计了一个视图。通常,当我单击按钮时,此视图将显示和隐藏。现在我试图用左到右和从右到左动画该视图。下面是我的代码,但它不起作用。请检查一下。
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;
这是我的视图,它将通过动画打开并隐藏。
答案 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)