Latest 2.0.1
Homepage https://github.com/DavdRoman/Popsicle
License MIT
Platforms ios 8.0, requires ARC
Frameworks UIKit
Authors

Popsicle header

Carthage compatible
CocoaPods compatible

GIF 1

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 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 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 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.

Latest podspec

{
    "name": "Popsicle",
    "version": "2.0.1",
    "summary": "Delightful, extensible Swift value interpolation framework",
    "homepage": "https://github.com/DavdRoman/Popsicle",
    "authors": {
        "David Romu00e1n": "[email protected]"
    },
    "license": {
        "type": "MIT",
        "file": "LICENSE"
    },
    "social_media_url": "https://twitter.com/DavdRoman",
    "platforms": {
        "ios": "8.0"
    },
    "source": {
        "git": "https://github.com/DavdRoman/Popsicle.git",
        "tag": "2.0.1"
    },
    "source_files": "Popsicle/*.{h,swift}",
    "frameworks": "UIKit",
    "requires_arc": true
}

Pin It on Pinterest

Share This