在我的应用程序中,我在屏幕顶部有一个 uiview。当我点击那个 UIView 时,我有第二个 View Controller 向上滑动。我想要完成的是,当第二个 View Controller 滑入屏幕时,它会在覆盖 UIView 之前停止
我想要完成的是有一个 View 向上滑动,其中包含商店信息,例如营业时间、地址、电话号码等。所以我想我可以有另一个 View Controller 来保存所有这些信息。只有一部分是我想阻止它向上滑动,以便它与顶部的 uiview 栏齐平。
//tap to bring up the second view controller
@IBAction func showInfoVC(sender: AnyObject) {
self.performSegueWithIdentifier("showSecondVC", sender: self)
}
最佳答案
听起来你的目标是:
- 有一个基本 View
- 将第二个 View 向上滑动到第一个 View
假设是这种情况,您可以通过多种方式完成此操作,但 Apple 可能会推荐 View Controller Containment .为此,您将拥有:
SlidingContainerViewController
。- 这是一个自定义容器 View Controller,它将容纳我们的其他两个 View Controller
- 一些背景 View Controller
- 一些前台 View Controller
这是自定义 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 中。底部 View Controller 只需在容器 View Controller 上调用 toggleFrontView()
就可以了。
为了演示目的,我在下面添加了两个示例 View Controller 。 你可以在github上查看整个项目:SlidingVC
*注意:此解决方案是在没有 Interface Builder 的情况下以编程方式实现的。我个人以这种方式完全用代码构建我所有的应用程序。如果你想使用 Interface Builder,你可以使用 Storyboard 和自定义 segues 来完成同样的事情。这里有相关教程:A Beginner’s Guide to Animated Custom Segues in iOS 8
关于ios - 如何在覆盖 UIView 之前停止幻灯片过渡到第二个 VC?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35301059/