Ecosyste.ms: Awesome

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

Awesome Lists | Featured Topics | Projects

https://github.com/Draveness/DKChainableAnimationKit

A DSL to make animation easy on iOS with Swift.
https://github.com/Draveness/DKChainableAnimationKit

animation animation-chain animation-effects chainable-animations swift

Last synced: 6 days ago
JSON representation

A DSL to make animation easy on iOS with Swift.

Awesome Lists containing this project

README

        

![](./Gifs/DKChainableAnimationKit.jpg)








This project is highly inspired by JHChainableAnimations, **If you project is developed with Objective-C, use [JHChainableAnimations](https://github.com/jhurray/JHChainableAnimations) instead.**

## With DKChainableAnimationKit

Using DKChainableAnimationKit, you do not need to write the **extra parentheses**.

```
view.animation.makeScale(2.0).spring.animate(1.0)
```

# Installation with CocoaPods

[CocoaPods](https://cocoapods.org/) is a dependency manager for Objective-C, which automates and simplifies the process of using 3rd-party libraries like DKNightVersion in your projects. See the [Get Started section](https://cocoapods.org/#get_started) for more details.

## Podfile

```
use_frameworks!

pod "DKChainableAnimationKit", "~> 2.0.0"
```

# Installation with Carthage

[Carthage](https://github.com/Carthage/Carthage) is a depency manager for Objectiv-C and Swift.

## Cartfile
```
github "Draveness/DKChainableAnimationKit"
```

# Usage

Import DKChainableAnimationKit in proper place.

```
import DKChainableAnimationKit
```

DKChainableAnimationKit is designed to be extremely easy to use. First call `animation` method on `UIView` instance, and then add the animation you want followed by a `animate(t)` method.

```
view.animation.moveX(100.0).animate(1.0)
```

## Animating

Chainable properties or functions like **`moveX(x)`** must come between the **`animate(duration)`** function.

```
view.animation.moveX(100.0).animate(1.0)
```

If you want mutiple animation at one time.

```
view.animation.moveX(100.0).moveY(100.0).animate(1.0)
```

This will move the view 100 point right and 100 point down at the same time. Order is not important.

## Chaining Animations

To chain animations separate the chains with the **thenAfter(duration)** function.

```
view.animation.moveX(100.0).thenAfter(1.0).makeScale(2.0).animate(2.0)
```

This will move the view for one second and after moving, it will scale for two seconds.

## Animation Effects

To add animation effect, call the effect method after the chainable property you want it to apply it.

Below is an example of moving a view with a spring effect.

```
view.animation.moveX(10).spring.animate(1.0)
```

If you add two animation effect, the first will be cancel out.

```
view.animation.moveX(10).spring.bounce.animate(1.0)
// The same as view.animation.moveX(10).bounce.animate(1.0)
```

## Anchoring

To anchor your view call an anchoring method at some point in an animation chain. And if you add two anchoring property, the first will be cancel like effects.

```
view.animation.rotate(180).anchorTopLeft.thenAfter(1.0).rotate(90).anchorCenter.animanimation
```

## Delay

To delay an animation call the **`wait(time)`** or **`delay(time)`** chainable function.

```
view.animation.moveXY(100, 40).wait(0.5).animate(1.0)
view.animation.moveXY(100, 40).delay(0.5).animate(1.0)
delay
```

This will move the view after 0.5 second delay.

## Completion

If you want to run code after an animation finishes, you are supposed to set the **`animationCompletion`** property or call **`animateWithCompletion(t, completion)`** function.

```
view.animation.makeX(0).animateWithCompletion(1.0, {
println("Animation Done")
})
```

This is the same as

```
view.animation.animationCompletion = {
println("Animation Done")
}
view.animation.makeX(0).animate(1.0)
```

And also the same as

```
view.animation.makeX(0).animate(1.0).animationCompletion = {
println("Animation Done")
}
```

## Bezier Paths

You can also animate a view along a UIBezierPath. Call `bezierPathForAnimation` method first and then add points or curves to it and us it in a chainable property.

```
let path = view.animation.bezierPathForAnimation()
path.addLintToPoint(CGPoint(x: 30, y: 40))
view.animation.moveOnPath(path).animate(1.0)
```

Animation effects does not work on path movement.

----

# Chainable Properties

moveX(100.0)

moveY(100.0)

moveWidth(100.0)

moveHeight(100.0)

moveXY(100.0, 100.0)

makeX(100.0)

makeY(100.0)

makeOrigin(100.0, 100.0)

makeCenter(100.0, 100.0)

makeWidth(100.0)

makeHeight(100.0)

makeSize(100.0, 100.0)

makeFrame(rect) // let rect: CGRect

makeBounds(rect) // let rect: CGRect

makeScale(2.0)

makeScaleX(2.0)

makeScaleY(2.0)

makeOpacity(0.0)

makeBackground(purple) // let purple: UIColor

makeBorderColor(red) // let red: UIColor

makeBorderWidth(10.0)

makeCornerRadius(25.0)

# To Do

* Support OS X
* Support Swift 2.0

----

# Contact

* If you have some advice open an issue or a PR.
* Email [Draveness](mailto: [email protected])

# License

DKChainableAnimationKit is available under the MIT license. See the LICENSE file for more info.