我正在试图熟悉swift4和xcode。我创建了一个容器视图,其ID类似于从子视图中使用UIView.animate切换宽度。
如果我从容器视图控制器类调用我的toggleWidth函数,它会动画。
如果我从子视图控制器调用它,它会改变宽度,但不会设置动画。
有人可以解释原因吗?
以下是相关代码:
容器控制器
class ViewController: UIViewController {
@IBOutlet weak var menuContainer: UIView!
@IBOutlet weak var menuWidth: NSLayoutConstraint!
override func viewDidLoad() {
super.viewDidLoad()
toggleMenu()
}
func toggleMenu() {
menuWidth.constant -= 100
UIView.animate(withDuration: 5) {
self.menuContainer.layoutIfNeeded()
}
}
}
儿童控制器
class MenuController : UITableViewController {
@IBOutlet weak var homeCell: UITableViewCell!
override func viewDidLoad() {
let tap = UITapGestureRecognizer(target: self, action: #selector(MenuController.imageTapped))
homeCell.addGestureRecognizer(tap)
homeCell.isUserInteractionEnabled = true
}
@objc func imageTapped()
{
(self.parent as! ViewController).toggleMenu()
}
}
感谢对此提供的任何帮助。
答案 0 :(得分:1)
宽度的变化需要在动画块中完成,如https://developer.apple.com/documentation/uikit/uiview/1622418-animate中所述。
class ViewController: UIViewController {
@IBOutlet weak var menuContainer: UIView!
@IBOutlet weak var menuWidth: NSLayoutConstraint!
override func viewDidLoad() {
super.viewDidLoad()
toggleMenu()
}
func toggleMenu() {
UIView.animate(withDuration: 5) {
self.menuWidth.constant -= 100
self.menuContainer.layoutIfNeeded()
}
}
}
答案 1 :(得分:0)