Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/azimin/AZTransitions

API to make great custom transitions in one method
https://github.com/azimin/AZTransitions

animation custom-animation custom-transitions transitions

Last synced: about 1 month ago
JSON representation

API to make great custom transitions in one method

Awesome Lists containing this project

README

        

# AZTransitions
[![CocoaPods Compatible](https://img.shields.io/cocoapods/v/AZTransitions.svg)](https://img.shields.io/cocoapods/v/AZTransitions.svg)
[![Carthage Compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)
[![SPM Compatible](https://img.shields.io/badge/spm-compatible-4BC51D.svg?style=flat)](https://github.com/apple/swift-package-manager)
[![Platform](https://img.shields.io/cocoapods/p/AZTransitions.svg?style=flat)](http://cocoadocs.org/docsets/AZTransitions)
[![Twitter](https://img.shields.io/badge/[email protected]?style=flat)](http://twitter.com/ziminalex)
![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg?style=flat)

Make your modal transition with custom animation.
AZTransitions helps you think about creativity, giving specific API methods.

## Visual Example

Inside this repository you can try `iOS Example` target with example `FashionTransition.swift` class:

![Animation example](imgs/animation_example.gif)

## Installation

- Add the following to your [`Podfile`](http://cocoapods.org/) and run `pod install`
```ruby
pod 'AZTransitions'
```
- or add the following to your [`Cartfile`](https://github.com/Carthage/Carthage) and run `carthage update`
```
github "azimin/AZTransitions"
```
- if you are using [`Swift Package Manager`](https://github.com/apple/swift-package-manager) just add it to the `dependencies` value of your `Package.swift`
```swift
dependencies: [
.package(url: "https://github.com/azimin/AZTransitions.git", .upToNextMajor(from: "0.26.0"))
]
```
- or clone as a git submodule,

- or just copy `AZTransitions/Source/CustomModalTransition.swift` into your project.

## Code Example

To create any custom transition just subclass `CustomModalTransition`:

```swift
class FashionTransition: CustomModalTransition {
override init() {
super.init(duration: 0.5)
}
}
```

--

Then set as `az_modalTransition` to nessesary view just before presenting it

```swift
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
segue.destination.customModalTransition = FashionTransition()
}
```

or

```swift
func show() {
let viewController = UIViewController()
viewController.customModalTransition = FashionTransition()
self.present(viewController, animated: true, completion: nil)
}
```

--

To have custom present animation, just implement `performTransition(interactive: Bool)` inside your `FashionTransition` class:

```swift
func performTransition(interactive: Bool) {
self.presentedViewController.view.alpha = 0.0

UIView.animate(withDuration: duration, animations: {
self.presentedViewController.view.alpha = 1.0
self.presentingViewController.view.alpha = 0.0
}, completion: { (completed) in
self.presentingViewController.view.alpha = 1.0
self.finishAnimation(completion: nil)
})
}
```

As you may have guessed, you have different properties. The main ones:

- `duration` β€” transition duration
- `presentingViewController` β€” the presenting view controller (bottom one)
- `presentedViewController` β€” view controller that is going to be presented (top one)

You can animate them as you want.

**πŸ”₯IMPORTANTπŸ”₯** don't forget to call `finishAnimation(completion: nil)` in the end.

In this case animation will be:

![Animation code example](imgs/animation_code_example.gif)

## UIModalPresentationStyle

Of course sometimes you want to use diffenret modal presentation styles (for example `overCurrentContext`), in this case you can call `setCustomModalTransition(customModalTransition: CustomModalTransition, inPresentationStyle: UIModalPresentationStyle)` of UIViewController instead of setting `customModalTransition` directly.

## More

You have different properties and methods to help you:

- `performDismissingTransition(interactive: Bool)` to implement custom transition animation when dismissing
- `fromViewController`/`toViewController` in term of Apple transition. They are reversed in presenting and dismissing transitions.
- `transitionContainerView` view where the transition takes place (`resentingViewController.view` and `presentedViewController.view` located on inside `transitionContainerView`), so you can add your custom views here to make animation more interesting (see `iOS Example`)
- Some methods for interactive animations (example will be added be soon)
- Some method to work with orientation changing things (example will be added be soon)