Popularity
7.4
Stable
Activity
0.0
Stable
1,106
36
109

Code Quality Rank: L3
Programming language: Swift
License: MIT License
Tags: Utility    
Latest version: v3.0.0

Popsicle alternatives and similar libraries

Based on the "Utility" category.
Alternatively, view Popsicle alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of Popsicle or a related project?

Add another 'Utility' Library

README

THIS PROJECT IS NO LONGER MAINTAINED.


Popsicle is a Swift framework for creating and managing interpolations of different value types with built-in UIKit support.

Installation

Carthage

github "DavdRoman/Popsicle"

CocoaPods

pod 'Popsicle'

Manual

Drag and copy all files in the [Popsicle](Popsicle) folder into your project.

At a glance

Interpolating UIView (or any other NSObject) values

First, you need an Interpolator instance:

let interpolator = Interpolator()

Next, you need to add some Interpolation<T> instances to your interpolator. In the example below, we are going to interpolate the alpha value of a UIView for times between 0 and 150:

let interpolation = Interpolation(yourView, alpha)
interpolation[0] = 0
interpolation[150] = 1
self.interpolator.addInterpolation(interpolation)

Note alpha is a built-in KeyPath<T, U> constant. Popsicle offers a nice set of [UIKit-related KeyPaths](Popsicle/KeyPath.swift) ready to be used. You may also use a completely custom key path.

You can also modify the easing function used at a given time:

interpolation.setEasingFunction(EasingFunctionEaseOutQuad, forTime: 0)

There's a bunch of [built-in easing functions](Popsicle/EasingFunction.swift) to choose from.

Finally, just make your interpolator vary its time depending on whatever you want. For example, the content offset of a UITableView:

func scrollViewDidScroll(scrollView: UIScrollView) {
    interpolator.time = Double(scrollView.contentOffset.y)
}

Interpolating custom values

You can declare a value type as interpolable by making it conform to the Interpolable protocol.

As an example, check out how CGPoint conforms to Interpolable:

extension CGSize: Interpolable {
    public static func interpolate(from fromValue: CGSize, to toValue: CGSize, withProgress progress: Progress) -> CGSize {
        let width = CGFloat.interpolate(from: fromValue.width, to: toValue.width, withProgress: progress)
        let height = CGFloat.interpolate(from: fromValue.height, to: toValue.height, withProgress: progress)

        return CGSizeMake(width, height)
    }

    public static func objectify(value: CGSize) -> AnyObject {
        return NSValue(CGSize: value)
    }
}

License

Popsicle is available under the MIT license.


*Note that all licence references and agreements mentioned in the Popsicle README section above are relevant to that project's source code only.