PullToDismiss
PullToDismiss provides dismiss modal viewcontroller function like Facebook Messenger by pulling scrollview or navigationbar with smooth and rich background effect.
| sample | blur sample | 
|---|---|
|  |  | 
Feature
- Support all scroll views. (UIScrollView, UITableView, UICollectionView, UIWebView, WKWebView)
- Customizable. (dismiss background color, alpha, height percentage of dismiss)
- Available in UIViewController, UINavigationController.
- Automatically add pan gesture to navigation bar.
- Blur effect support.
- Objective-C support. (from v2.1~)
Migration guide
If you update from 1.x to 2.0, see migration guide if needed.
Usage
Getting Started
(1) Setup PullToDismiss
import PullToDismiss
class SampleViewController: UIViewController {
    @IBOutlet private weak var tableView: UITableView!
    private var pullToDismiss: PullToDismiss?
    override func viewDidLoad() {
        super.viewDidLoad()
        pullToDismiss = PullToDismiss(scrollView: tableView)
    }
}(2) Create view controller and set modalPresentationStyle. Then present view controller
let vc = SampleViewController()
let nav = UINavigationController(rootViewController: vc)
nav.modalPresentationStyle = .overCurrentContext
self.present(nav, animated: true, completion: nil)Use (UIScrollView|UITableView|UICollectionView)Delegate
You can use all scroll view's delegate by set pullToDismiss.delegate.
import PullToDismiss
class SampleViewController: UIViewController {
    @IBOutlet private weak var tableView: UITableView!
    private var pullToDismiss: PullToDismiss?
    override func viewDidLoad() {
        super.viewDidLoad()
        pullToDismiss = PullToDismiss(scrollView: tableView)
        pullToDismiss?.delegate = self
    }
}
extension SampleViewController: UITableViewDelegate {
    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        // ...
    }
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        // ...
    }
}Customize
You can customize backgroundEffect, dismissableHeightPercentage:
Shadow background effet
- background (default: ShadowEffect.default, [color: black, alpha: 0.8])
pullToDismiss?.background = ShadowEffect(color: .red, alpha: 0.5) // color: red, alpha: 0.5Blur background effect
New feature for v1.0.
// preset blur (.extraLight, .light, .dark)
pullToDismiss?.background = BlurEffect.extraLight
// set custom Blur
pullToDismiss?.background = BlurEffect(color: .red, alpha: 0.5, blurRadius: 40.0, saturationDeltaFactor: 1.8)dismissableHeightPercentage
// to pull half size of view controller, dismiss view controller.
pullToDismiss?.dismissableHeightPercentage = 0.5Requirements
- iOS 8.0+ (blur effect: iOS 9.0+)
- Xcode 8.1+
- Swift 3.0+
Installation
Carthage
- Add the following to your Cartfile:
# Swift 5.0 or later
github "sgr-ksmt/PullToDismiss" ~> 2.2
# Swift 3
github "sgr-ksmt/PullToDismiss", 2.1- Run carthage update
- Add the framework as described.
 Details: Carthage Readme
CocoaPods
PullToDismiss is available through CocoaPods. To install it, simply add the following line to your Podfile:
# Swift 5.0 or later
pod 'PullToDismiss', '~> 2.2'
# Swift 3
pod 'PullToDismiss', '2.1'and run pod install
Manually Install
Download all *.swift files and put your project.
Change log
Change log is here.
Communication
- If you found a bug, open an issue.
- If you have a feature request, open an issue.
- If you want to contribute, submit a pull request.💪 
License
PullToDismiss is under MIT license. See the LICENSE file for more info.

