GithubHelp home page GithubHelp logo

trxy / trx Goto Github PK

View Code? Open in Web Editor NEW
118.0 7.0 14.0 1.98 MB

Squeeze, chain, overlap, seek. A powerful swift animation framework

License: MIT License

Ruby 1.69% Objective-C 0.33% Swift 97.98%
animation swift-library swift-3 ios swift custom-transitions ios-animation apple-tv

trx's Introduction

TRX

Build Status CocoaPods Carthage License Swift

TRX is a versatile animation framework built with ease of use, powerful features and performance in mind. TRX is inspired by the excellent JavaScript animation framework GSAP.

This version is works with Swift 4. For Swift 3 compatible version use 0.5.0.

Key Features

  • Animate any numerical value
  • Chain, overlap and group Tweens into Timelines
  • Squeeze and stretch Tweens and Timelines
  • Have total control, pause, play, seek any Tween or Timeline

Examples

Tricks

Take a look at Tricks the example app.

Using TRX

Basic Usage

Tween any value

Tween(from: 0, to: 20, time: 0.3) {
  object.value = $0
}.start()

Or, neater...

1.trx(to: 20) { object.value = $0 }.start()

Tween Double, CGFloat, CGPoint, CGSize, CGRect, CGAffineTransform, CATransform3D or even your own type (by extending the Morphable Protocol)

Tween(from: CGPoint.zero, to: CGPoint(x: 20, y: 15), time: 0.3) {
  layer.position = $0
}.start()

Use optional parameters for fine-grained control

Tween(from: 0,
      to: 1,
      time: 0.3,
      delay: 0.1,
      ease: Ease.Elastic.easeOut,
      key: "MyOwnKey",
      onStart: { print("start") },
      onComplete: { done in print("complete and done: \(done)") }) { value in
        object.value = value
}.start()
  • from: Starting value (Morphable).
  • to: End value (Morphable).
  • time: Duration (NSTimeInterval).
  • delay: optional Time offset (NSTimeInterval). Defaults to 0.
  • ease: optional Timing function (Ease.TimingFunction). Defaults to Ease.Quad.easeOut.
  • key: optional Tween key (String). Any other running animation with the same key will be stopped. Defaults to nil.
  • onStart: optional Start callback. Defaults to nil.
  • onComplete: optional Completion callback. Defaults to nil.
  • update: Update callback

Timelines

Use a Timeline to chain Tweens or even other timelines

TimeLine(tweens: [
  1.trx(to: 20) { object.value = $0 },
  30.trx(to: 40) { object.value = $0 },
  40.trx(to: 50) { object.value = $0 },
]).start()

Timeline

Add Tweens with an overlap

let timeline: TimeLine = [
  1.trx(to: 20) { object.value = $0 }: 0,
  30.trx(to: 40) { anOtherObject.value = $0 }: -0.5,
  40.trx(to: 50) { anOtherObject.value = $0 }: -0.5
]
timeline.start()

Timeline with an overlap

Squeeze and stretch Tweens or timelines

let tween = Tween(from: 0,
                  to: 1,
                  time: 0.5) { print($0) }

tween.scale = 2 // duration: 1s
tween.duration = 2.0 // scale: 4

UIView integration

Move to a new position

myView.trxCenter(to: CGPoint(x: 10, y: 15))

Move from a position to the current one

myView.trxCenter(from: CGPoint.zero)

Animate frame to a given CGRect

myView.trxFrame(to: someFrame)

Animate frame from a given CGRect to the current frame

myView.trxFrame(to: someFrame)

Requirements

iOS: 8.4, tvOS: 9.0, Xcode 9, Swift 4.0

For swift 2.3 compatible version check out TRX 4.x

Installation

Cocoa Pods

pod "TRX"

Don't forget to add use_frameworks! to the Podfile. Requires CocoaPods 0.36.x or higher. If you need more help use CocoaPods Guides.

Carthage

Add to your Cartfile:

github "Trxy/TRX"

Swift Package Manager (Experimental)

Specify a dependency in Package.swift

...
.Package(url: "https://github.com/Trxy/TRX.git", majorVersion: 0, minor: 3),
...

Manual

  1. Download or clone the project
  2. Build the preferred target (eg. TRX iOS)
  3. Locate the framework in finder (from the products group) file and add it to your project.
  4. Add the framework as a dependency of your target in Build Phases
  5. Add the framework to “Link Binary with Libraries” and in the “General” tab under “Embedded Binaries”
  6. In order to distribute your app you need to build it for all possible architectures (armv7, armv7s, arm64, x86, etc)

Contributions

Contributions and suggestions are welcome!

If you find any problems using TRX or have any feature requests feel free to create an issue and/or a pull request. In the event of a problem don't forget to add a detailed description, Xcode and target version as well as steps to reproduce.

If you'd like to ask a general question use Stack Overflow with tag trx.swift.

Todos

  • Mac version
  • Custom Bezier Curve easing
  • Short rotation plugin
  • Bezier path plugin

License

MIT

Contributors:

trx's People

Contributors

modzelewski avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

trx's Issues

Add some explanations

This is hard to understand the main principle of TRX. e.g what does the number 1 before the dots in 1.trx(to: 20) { object.value = $0 }.start() means?

And where is the time value in the neater way of the basic usage?

Tween(from: 0, to: 20, time: 0.3) {
  object.value = $0
}.start()

Or, neater...

1.trx(to: 20) { object.value = $0 }.start()

Thus I think documentation should be helpful!

Revert to original position

Hi,

May I ask if you have a sample, method or a way to revert the views to its original position.

Thanks.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.