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

时间:2016-05-30 11:45:10

标签: ios xcode swift

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

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

所有viewControllers都是SnapContainerViewController的childViewController。

因此

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

  2. 从技术上讲,所有的viewControllers都已经出现了#34;国家,它不会打电话给#34; viewDidAppear"再次在" viewDidDisappear"

  3. 之前
  4. 可以从滚动事件中识别分页更改(将视图切换到屏幕上)。

  5. 识别哪个viewController在屏幕上的示例(对于索引为0,1,2的水平滚动视图) 垂直scrollView的类似处理。

    只需在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)
        }
    

答案 2 :(得分:0)

如您所说,加载应用时会加载每个ViewController,视图会被放大,您只能在视图控制器之间滚动。因此,您错过了UIViewController课程的好处。你最好的选择是:

  1. 要通过将property listeners设置为UIScrollView的中心来获取屏幕位置,请参阅Understanding UIScrollView
  2. 设置更改的计时器或识别触摸。
  3. 使用better project,并根据需要进行修改