Swiftpack.co -  danielhorv/Modamic as Swift Package
Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.
danielhorv/Modamic
Lightweight library for presenting UIViewController in Modal.
.package(url: "https://github.com/danielhorv/Modamic.git", from: "v0.0.2")
Modamic

xcodebuild

Lightweight library for presenting UIViewController in Modal.

⚠️ the library is WIP, if you find a bug, please create an issue or pull request

Preview

Preview Preview Preview

Features 🎉

  • automatic keyboard handling
  • runtime animated resizing
  • customizable configuration
  • vertical positions
  • custom AnimatedTransitioning
  • UINavigationController support
  • coordination pattern support

Usage

Available vertical positions

  • top
  • center
  • bottom

Configuration

There is a default ModemicConfiguration, but you can also create a custom configuration. The list of the available properties

    /// The presented controller have rounded corners.
    public var roundCorners: Bool = true
    
    /// Radius of rounded corners for presented controller if roundCorners is true.
    public var cornerRadius: CGFloat = 10
    
    /// Keyboard shows animation duration
    public var showKeyboardAnimationDuration: TimeInterval = 0.5
    
    /// Keyboard hiding animation duration
    public var hideKeyboardAnimationDuration: TimeInterval = 0.5
    
    /// Non notch device bottom spacing
    public var nonNotchBottomSpacing: CGFloat = 20
    
    /// Non notch device top spacing
    public var nonNotchTopSpacing: CGFloat = 20
    
    /// Automatically dismisses keyboard if the viewController is dismissed
    public var autoDismissKeyboard: Bool = true
    
    /// Background color of the dimmed backgroundView
    public var dimmingViewBackgroundColor = UIColor(white: 0, alpha: 0.4)
    
    /// Cutomize the animation of the contentSize resizing
    public var contentSizeChangedAnimationOptions: AnimationSettings = (duration: 0.3, delay: 0, usingSpringWithDamping: 0.8, initialSpringVelocity: 15)

    /// Tap on the backgroundView automatically dismisses the ViewController
    public var autoDismissOnBackgroundTap: Bool = true
    
    /// Vertical position of the viewController
    public var modalVerticalPosition: ModalVerticalPosition = .bottom
    
    /// Width of the modal viewController
    public var modalWidth: ModalWidth = .parentFactor(0.9)
    
    /// Animated transition for the modal
    public var animatedTransition: AnimatedTransition = .bottom

Runtime resizing

The library supports AutoLayout, so if you add/remove some view or change the height of a subview, you just need to call the setPreferredContentSizeFromAutolayout() method of the UIViewController. This will recalculate the height and animate the resized modal - check the example project.

Width

There are 2 ways to define the width of the modal

  • dynamic: use a factor to scale the width of the parent ViewController
  • fixed: set a fixed width for the modal

Animation Transition

You can use the default (bottom push) and also a top animation to present your modal. But there is also a custom(forPresented: UIViewControllerAnimatedTransitioning, forDismissed: UIViewControllerAnimatedTransitioning) case to use your custom Animation.

Example

    let modamicConfig = ModamicConfiguration()
    modamicConfig.autoDismissKeyboard = false
    modamicConfig.modalVerticalPosition = .center

    let presenter = ModamicPresenter(configuration: modamicConfig)
    presenter.presentModal(viewController: updateViewController, on: self, completion: nil)

TODOs

  • scrollView if the content is bigger than the screen
  • rotation handling

Installation

CocoaPods:

pod "Modamic"

Swift Package Manager:

git@github.com:danielhorv/Modamic.git

Requirements

  • Swift 5
  • iOS 9

GitHub

link
Stars: 5
Last commit: 2 weeks ago

Ad: Job Offers

iOS Software Engineer @ Perry Street Software
Perry Street Software is Jack’d and SCRUFF. We are two of the world’s largest gay, bi, trans and queer social dating apps on iOS and Android. Our brands reach more than 20 million members worldwide so members can connect, meet and express themselves on a platform that prioritizes privacy and security. We invest heavily into SwiftUI and using Swift Packages to modularize the codebase.

Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API