Skip to content

A custom modal transition that presents a controller with an expanding effect while sliding out the presenter remnants.

License

Notifications You must be signed in to change notification settings

ifitdoesntwork/DAExpandAnimation

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

48 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SPM supported

DAExpandAnimation

A custom modal transition that presents a controller with an expanding effect while sliding out the presenter remnants.

Screenshot

DAExpandAnimation

Installation

Simply copy the Sources/DAExpandAnimation/DAExpandAnimation.swift file into your project.

Swift Package Manager

DAExpandAnimation is also available through Swift Package Manager.

.package(url: "https://github.com/ifitdoesntwork/DAExpandAnimation.git", from: "1.0.0")

Usage

Try the example project!

Have your view controller conform to UIViewControllerTransitioningDelegate. Optionally set the collapsedViewFrame, the expandedViewFrame, the slidingPart and the animationDuration.

private let animationController = DAExpandAnimation()

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    guard let selectedCell = sender as? UITableViewCell else {
        return
    }
    
    let toViewController = segue.destination
    toViewController.transitioningDelegate = self
    toViewController.modalPresentationStyle = .custom
    toViewController.view.backgroundColor = selectedCell.backgroundColor
    
    animationController.collapsedViewFrame = {
        selectedCell.frame
    }
    animationController.animationDuration = Constants.demoAnimationDuration()
}
    
func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
    animationController
}

func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
    animationController
}

Protocols

Adopting DAExpandAnimationPresentingViewAdapter provides the following optional delegate methods for tailoring the presenter's UX.

/// Determines whether the animations include sliding the presenter's view apart.
/// Defaults to `true`.
var shouldSlideApart: Bool { get }

/// Notifies the presenter's view adapter that animations are about to occur.
func animationsWillBegin(in view: UIView, presenting isPresentation: Bool)

/// Notifies the presenter's view adapter that animations are just completed.
func animationsDidEnd(presenting isPresentation: Bool)

Adopting DAExpandAnimationPresentedViewAdapter provides the following optional delegate methods for tailoring the presentation of a new view controller.

/// Gives the presented view adapter a chance to prepare
/// the expanding `view` before the animations.
func prepare(expanding view: UIView)

/// Gives the presented view adapter ability to change
/// properties of the expanding `view` alongside the animations.
func animate(expanding view: UIView)

/// Gives the presented view adapter ability to clean the expanded `view` up
/// after the animations are performed.
func cleanup(expanding view: UIView)

/// Gives the presented view adapter a chance to prepare
/// the collapsing `view` before the animations.
func prepare(collapsing view: UIView)

/// Gives the presented view adapter ability to change
/// properties of the collapsing `view` alongside the animations.
func animate(collapsing view: UIView)

/// Gives the presented view adapter ability to clean the collapsed `view`
/// up after the animations are performed.
func cleanup(collapsing view: UIView)

About

A custom modal transition that presents a controller with an expanding effect while sliding out the presenter remnants.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages