Создать навигационный ящик, представив контроллер? - PullRequest
0 голосов
/ 06 июня 2018

У меня есть ящик для демонстрационной навигации, предварительно настроив контроллер с пользовательской анимацией слева направо.И когда мы увольняем контроллер, мы применяем анимацию справа налево.Хотя это и работает, но анимация ящика выглядит не так хорошо, как встроенный ящик андроида.Можете ли вы сказать мне, каков наилучший способ добиться этого?Хотя я не хочу зависеть от какой-либо третьей стороны для этой функции.

@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
        }
    }

Ниже приведен скриншот раскадровки enter image description here enter image description here

Ответы [ 3 ]

0 голосов
/ 11 июня 2018

Попробуйте создать контроллер вида с произвольным размером и представить контроллер с

viewController.modalPresentationStyle = .OverCurrentContext
yourContorller.presentViewController(viewController, animated: true, completion: nil)
0 голосов
/ 11 июня 2018

Если вы хотите достичь этого, не используя какую-либо третью библиотеку, этого можно достичь с помощью этого подхода.

  1. Добавить представление контейнера в MainViewController.
  2. Добавить сторонуTableViewController для представления контейнера, используя segue

  3. Установите ширину представления Container по мере необходимости.

  4. Добавьте ограничения к представлению контейнера, ведущие, верхние, нижние ипостоянная ширина.

  5. Создание выходного значения конечного ограничения в представлении и переключение его константы из значения MainViewController за вычетом значения ширины и отображения 0.

** MainViewController **

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

Результат

0 голосов
/ 11 июня 2018

Вместо того, чтобы использовать другой ViewController, вы можете взять .xib UIView в качестве панели навигации и применить пользовательскую анимацию для представления этого UIView слева направо, изменив его X-координату и ее рамку.

...