gpt4 book ai didi

ios - 通过呈现 Controller 创建抽屉导航?

转载 作者:搜寻专家 更新时间:2023-10-30 21:59:11 25 4
gpt4 key购买 nike

我通过从左到右预先设置一个带有自定义动画的 Controller 来创建一个演示抽屉导航。当我们关闭 Controller 时,我们从右到左应用动画。它虽然有效,但抽屉动画看起来不如原生 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
}
}

下面是 Storyboard截图 enter image description here enter image description here

最佳答案

如果您想在不使用任何第三方库的情况下实现这一点,可以通过这种方法实现。

  1. 在 MainViewController 中添加容器 View 。
  2. 使用 segue 将 Side TableViewController 添加到容器 View

  3. 根据需要设置容器 View 的宽度。

  4. 为容器 View 前导、顶部、底部和恒定宽度添加约束。

  5. 在 View 中创建尾随约束的导出,并将其常量从 MainViewController 值减去宽度值切换为隐藏,0 为显示。

** 主视图 Controller **

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()
}
}

}

SlideTableViewController

import UIKit

class SlideTableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

var dataItems: [String] = ["item1", "item2", "item3", "item4"]

@IBOutlet weak var tabelView: UITableView!

override func viewDidLoad() {
super.viewDidLoad()
tabelView.delegate = self
tabelView.dataSource = self
}

// MARK: - Table view data source
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return dataItems.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
cell.textLabel?.text = dataItems[indexPath.row]
return cell
}
}

enter image description here enter image description here

结果

关于ios - 通过呈现 Controller 创建抽屉导航?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50715882/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com