Skip to content

Instantly share code, notes, and snippets.

@kmadiar
Forked from bricklife/ViewController.swift
Created October 6, 2020 22:31
Show Gist options
  • Select an option

  • Save kmadiar/1b69538949ab0a010b3b31d26d098b11 to your computer and use it in GitHub Desktop.

Select an option

Save kmadiar/1b69538949ab0a010b3b31d26d098b11 to your computer and use it in GitHub Desktop.

Revisions

  1. Shinichiro Oba created this gist Mar 8, 2018.
    69 changes: 69 additions & 0 deletions ViewController.swift
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,69 @@
    //
    // ViewController.swift
    // PanOnScroll
    //
    // Created by Shinichiro Oba on 2018/03/08.
    // Copyright © 2018 bricklife.com. All rights reserved.
    //

    import UIKit

    class ViewController: UIViewController {

    @IBOutlet weak var topMargin: NSLayoutConstraint!

    weak var scrollView: UIScrollView!

    override func viewDidLoad() {
    super.viewDidLoad()

    let pan = UIPanGestureRecognizer(target: self, action: #selector(pan(_:)))
    pan.delegate = self
    scrollView.addGestureRecognizer(pan)

    move(0)
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let nav = segue.destination as! UINavigationController
    let table = nav.childViewControllers.first as! UITableViewController
    scrollView = table.tableView
    }

    func move(_ y: CGFloat) {
    topMargin.constant = 100 + y
    }

    var start: CGFloat = 0

    @objc func pan(_ pan: UIPanGestureRecognizer) {
    let position = pan.location(in: view)
    switch pan.state {
    case .began:
    start = position.y + scrollView.contentOffset.y
    case .changed:
    let diff = position.y - start
    if diff > 0 {
    move(diff)
    scrollView.contentOffset = .zero
    scrollView.showsVerticalScrollIndicator = false
    } else {
    move(0)
    scrollView.showsVerticalScrollIndicator = true
    }
    default:
    move(0)
    scrollView.showsVerticalScrollIndicator = true
    UIView.animate(withDuration: 0.2) {
    self.view.layoutIfNeeded()
    }
    }
    }
    }

    extension ViewController: UIGestureRecognizerDelegate {

    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    return true
    }
    }