所以我正在使用这个Github包:https://github.com/jakespracher/Snapchat-Swipe-View
我有一个问题。 viewDidLoad
和 viewDidAppear
仅在应用程序加载时运行一次。如何在每次let left = storyboard.instantiateViewControllerWithIdentifier("left")
出现在屏幕上时运行代码?
我相信viewWillAppear
方法每次都会运行。否则,您可以使用viewDidLayoutSubviews
.
Snapchat-Swipe-View 一次将所有 viewControllers 和视图加载到 SnapContainerViewController 的 scrollView 中。
所有 viewControllers 都是 SnapContainerViewController 的子 ViewController。
因此
-
所有 viewController将立即收到 viewDidLoad 和 viewDidAppear
-
从技术上讲,所有 viewControllers 都已经处于"出现"状态,在"viewDidDisappear"之前不会再次调用"viewDidAppear"
-
寻呼更改(切换到屏幕视图)可以从滚动事件中识别。
用于识别屏幕上哪个视图控制器的示例(对于索引为 0、1、2 的水平滚动视图)垂直滚动视图的类似处理。
只需在 SnapContainerViewController 中添加以下回调方法.swift
extension SnapContainerViewController: UIScrollViewDelegate {
func scrollViewDidEndDecelerating(scrollView: UIScrollView){
let fullWidth = scrollView.frame.size.width
let pageNo: NSInteger = lround(Double(scrollView.contentOffset.x / fullWidth))
print("page is shown:", pageNo)
}
就像你说的,每个ViewController
都是在加载应用程序时加载的,视图被放大,你只在视图控制器之间滚动。因此,您错过了UIViewController
类的好处。最好的选择是:
- 若要通过将属性侦听器设置为
UIScrollView
中心来获取屏幕位置,请参阅了解 UIScrollView。 - 设置更改计时器或识别触摸。
- 使用更好的项目,并根据您的需要进行修改