我通过从左到右预先设置一个带有自定义动画的控制器来创建一个演示导航抽屉。当我们关闭控制器时,我们从右到左应用动画。它虽然有效,但抽屉动画看起来不像原生的android抽屉那么好。所以你能告诉我实现这一目标的最佳方法是什么。虽然我不想依赖任何第三方来实现此功能。
@IBAction func actionMenu(_ sender: Any) {
let controler:DrawerController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "DrawerController")
as! DrawerController
let transition = CATransition()
transition.duration = 0.5
transition.type = kCATransitionPush
transition.subtype = kCATransitionFromLeft
transition.timingFunction = CAMediaTimingFunction(name:kCAMediaTimingFunctionDefault)
view.window!.layer.add(transition, forKey: kCATransition)
present(controler, animated: false) {
controler.drawerView.backgroundColor = UIColor.black
controler.drawerView.alpha = 0.6
}
}
答案 0 :(得分:2)
如果你想在不使用任何第三方的lib的情况下实现这一点,这种方法是可以实现的。
使用segue
根据需要设置容器视图的宽度。
为容器视图的前导,上限,下限和恒定宽度添加约束。
在视图中创建尾随约束的出口,并将其常量从MainViewController值切换为宽度值减去隐藏,将0显示为显示。
** MainViewController **
/* ... */
for(;;){
System.out.print("Enter a score. -1 to quit: ");
int score = in.nextInt();
if(score == -1){
break;
} else{
totalScore += score;
entry++;
}
}
/* ... */
<强> SlideTableViewController 强>
import UIKit
class MainViewController: UIViewController {
@IBOutlet var leadingConstraint: NSLayoutConstraint!
@IBOutlet weak var containerView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func openView(_ sender: Any) {
if leadingConstraint.constant == -250{
leadingConstraint.constant = 0
}
else{
leadingConstraint.constant = -250
}
UIView.animate(withDuration: 0.4) {
self.view.layoutIfNeeded()
}
}
}
<强>结果强>
答案 1 :(得分:0)
您可以将UIView的 .xib 作为导航抽屉,并应用自定义动画,通过更改它的X坐标从左到右呈现此UIView,而不是使用另一个ViewController。它的框架。
答案 2 :(得分:0)
尝试使视图控制器具有自由形式大小,并使用
显示控制器viewController.modalPresentationStyle = .OverCurrentContext
yourContorller.presentViewController(viewController, animated: true, completion: nil)