检测视图何时出现在屏幕上



所以我正在使用这个Github包:https://github.com/jakespracher/Snapchat-Swipe-View

我有一个问题。 viewDidLoadviewDidAppear 仅在应用程序加载时运行一次。如何在每次let left = storyboard.instantiateViewControllerWithIdentifier("left")出现在屏幕上时运行代码?

我相信viewWillAppear方法每次都会运行。否则,您可以使用viewDidLayoutSubviews .

Snapchat-Swipe-View 一次将所有 viewControllers 和视图加载到 SnapContainerViewController 的 scrollView 中。

所有 viewControllers 都是 SnapContainerViewController 的子 ViewController。

因此

  1. 所有 viewController将立即收到 viewDidLoad 和 viewDidAppear

  2. 从技术上讲,所有 viewControllers 都已经处于"出现"状态,在"viewDidDisappear"之前不会再次调用"viewDidAppear"

  3. 寻呼更改(切换到屏幕视图)可以从滚动事件中识别。

用于识别屏幕上哪个视图控制器的示例(对于索引为 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类的好处。最好的选择是:

  1. 若要通过将属性侦听器设置为UIScrollView中心来获取屏幕位置,请参阅了解 UIScrollView。
  2. 设置更改计时器或识别触摸。
  3. 使用更好的项目,并根据您的需要进行修改

最新更新