在我的应用程序中,我在屏幕顶部有一个uiview。当我点击UIView时,我有第二个View Controller向上滑动。我想要实现的是,当第二个View Controller滑入屏幕时,它会在它掩盖UIView之前停止
我想要完成的是有一个视图向上滑动,其中包含商店信息,如营业时间,地址,电话号码等。所以我想我可以拥有另一个包含所有这些信息的视图控制器。只有一部分是我想阻止它向上滑动,所以它与顶部的uiview条齐平。
//tap to bring up the second view controller
@IBAction func showInfoVC(sender: AnyObject) {
self.performSegueWithIdentifier("showSecondVC", sender: self)
}
答案 0 :(得分:2)
听起来你的目标是:
假设是这种情况,有多种方法可以实现这一点,但Apple可能会推荐View Controller Containment。要做到这一点,你将拥有:
SlidingContainerViewController
。
以下是自定义SlidingContainerViewController的基本实现
// SlidingContainerViewController.swift
import UIKit
class SlidingContainerViewController: UIViewController {
//MARK: - Init
init(frontViewController: UIViewController, backViewController: UIViewController) {
super.init(nibName: nil, bundle: nil)
frontViewContoller = frontViewController
backViewContoller = backViewController
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
//MARK: - Public
var frontViewContoller: UIViewController = UIViewController()
var backViewContoller: UIViewController = UIViewController()
var splitOriginY: CGFloat = 160.0
func toggleFrontView() {
if frontIsVisible {
UIView.animateWithDuration(0.4) {
self.frontViewContoller.view.frame.origin.y = self.view.frame.height
self.frontIsVisible = false
}
} else {
UIView.animateWithDuration(0.4) {
self.frontViewContoller.view.frame.origin.y = self.splitOriginY
self.frontIsVisible = true
}
}
}
//MARK: - ViewLifecycle
override func viewDidLoad() {
super.viewDidLoad()
addChild(backViewContoller)
addChild(frontViewContoller)
self.frontViewContoller.view.frame.origin.y = self.view.frame.height
}
//MARK: - Private
var frontIsVisible = false
private func addChild(viewController: UIViewController) {
addChildViewController(viewController)
view.addSubview(viewController.view)
viewController.view.frame = view.bounds
viewController.didMoveToParentViewController(self)
}
}
然后,您可以将所需的任何自定义视图控制器放入此容器View Controller中。底层视图控制器只需要在容器View Controller上调用toggleFrontView()
,只要它想要幻灯片发生。
下面我添加了两个示例视图控制器用于演示目的。 您可以在github上查看整个项目:SlidingVC
*注意:此解决方案是在没有Interface Builder的情况下以编程方式实现的。我个人用这种方式完全用代码构建我的所有应用程序。如果您希望使用Interface Builder,您可以使用Storyboard和自定义segue完成相同的操作。以下是相关教程:A Beginner’s Guide to Animated Custom Segues in iOS 8