swift addchildviewcontroller
2020-06-07 本文已影响0人
松龄学编程
func tapAtLabel() {
guard let naviController = navigationController,
let naviView = naviController.view else { return }
let controller = FollowUserViewController()
controller.view.translatesAutoresizingMaskIntoConstraints = false
naviView.addSubview(controller.view)
NSLayoutConstraint.activate([
controller.view.leftAnchor.constraint(equalTo: naviView.leftAnchor),
controller.view.rightAnchor.constraint(equalTo: naviView.rightAnchor),
controller.view.topAnchor.constraint(equalTo: naviView.topAnchor),
controller.view.bottomAnchor.constraint(equalTo: naviView.bottomAnchor)
])
controller.view.setNeedsLayout()
controller.view.layoutIfNeeded()
naviController.addChild(controller)
controller.didMove(toParent: naviController)
}
class FollowUserViewController: UIViewController {
let followView = FollowUserView()
var constraint: NSLayoutConstraint?
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor.black.withAlphaComponent(0.4)
let minHeight: CGFloat = 80
var height: CGFloat = UIScreen.main.bounds.height * 0.7
if FDDevice.hasTopNotch {
height += 34
}
followView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(followView)
NSLayoutConstraint.activate([
followView.leftAnchor.constraint(equalTo: view.leftAnchor),
followView.rightAnchor.constraint(equalTo: view.rightAnchor),
followView.heightAnchor.constraint(equalToConstant: height),
])
constraint = followView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: height)
constraint?.isActive = true
followView.offsetYCallBack = { [weak self] constant in
guard let `self` = self else { return }
if constant <= 0 {
self.constraint?.constant = 0
} else if constant >= height - minHeight {
self.constraint?.constant = height - minHeight
} else {
self.constraint?.constant = constant
}
}
followView.panEndCallBack = { [weak self] offsetY in
guard let `self` = self else { return }
if offsetY <= height / 2 {
self.doShowUpAnimation()
} else {
self.leave()
}
}
}
override func didMove(toParent parent: UIViewController?) {
super.didMove(toParent: parent)
doShowUpAnimation()
}
func doShowUpAnimation() {
constraint?.constant = 0
UIView.animate(withDuration: 0.15) {
self.view.setNeedsLayout()
self.view.layoutIfNeeded()
}
}
func leave() {
view.removeFromSuperview()
willMove(toParent: nil)
removeFromParent()
}
}