Giter Club home page Giter Club logo

pop's Introduction

pop

Pop is an extensible animation engine for iOS, tvOS, and OS X. In addition to basic static animations, it supports spring and decay dynamic animations, making it useful for building realistic, physics-based interactions. The API allows quick integration with existing Objective-C or Swift codebases and enables the animation of any property on any object. It's a mature and well-tested framework that drives all the animations and transitions in Paper.

Build Status

Installation

Pop is available on CocoaPods. Just add the following to your project Podfile:

pod 'pop', '~> 1.0'

Bugs are first fixed in master and then made available via a designated release. If you tend to live on the bleeding edge, you can use Pop from master with the following Podfile entry:

pod 'pop', :git => 'https://github.com/facebook/pop.git'

Framework (manual)

By adding the project to your project and adding pop.embedded framework to the Embedded Binaries section on the General tab of your app's target, you can set up pop in seconds! This also enables @import pop syntax with header modules.

Note: because of some awkward limitations with Xcode, embedded binaries must share the same name as the module and must have .framework as an extension. This means that you'll see three pop.frameworks when adding embedded binaries (one for OS X, one for tvOS, and one for iOS). You'll need to be sure to add the right one; they appear identically in the list but note the list is populated in order of targets. You can verify the correct one was chosen by checking the path next to the framework listed, in the format <configuration>-<platform> (e.g. Debug-iphoneos).

Embedded Binaries

Note 2: this method does not currently play nicely with workspaces. Since targets can only depend on and embed products from other targets in the same project, it only works when pop.xcodeproj is added as a subproject to the current target's project. Otherwise, you'll need to manually set the build ordering in the scheme and copy in the product.

Static Library (manual)

Alternatively, you can add the project to your workspace and adopt the provided configuration files or manually copy the files under the pop subdirectory into your project. If installing manually, ensure the C++ standard library is also linked by including -lc++ to your project linker flags.

Usage

Pop adopts the Core Animation explicit animation programming model. Use by including the following import:

Objective-C

#import <pop/POP.h>

or if you're using the embedded framework:

@import pop;

Swift

import pop

Start, Stop & Update

To start an animation, add it to the object you wish to animate:

Objective-C

POPSpringAnimation *anim = [POPSpringAnimation animation];
...
[layer pop_addAnimation:anim forKey:@"myKey"];

Swift

let anim = POPSpringAnimation()
...
layer.pop_add(anim, forKey: "myKey")

To stop an animation, remove it from the object referencing the key specified on start:

Objective-C

[layer pop_removeAnimationForKey:@"myKey"];

Swift

layer.pop_removeAnimation(forKey: "myKey")

The key can also be used to query for the existence of an animation. Updating the toValue of a running animation can provide the most seamless way to change course:

Objective-C

anim = [layer pop_animationForKey:@"myKey"];
if (anim) {
  /* update to value to new destination */
  anim.toValue = @(42.0);
} else {
  /* create and start a new animation */
  ....
}

Swift

if let anim = layer.pop_animation(forKey: "myKey") as? POPSpringAnimation {
    /* update to value to new destination */
    anim.toValue = 42.0
} else {
    /* create and start a new animation */
    ....
}

While a layer was used in the above examples, the Pop interface is implemented as a category addition on NSObject. Any NSObject or subclass can be animated.

Types

There are four concrete animation types: spring, decay, basic and custom.

Spring animations can be used to give objects a delightful bounce. In this example, we use a spring animation to animate a layer's bounds from its current value to (0, 0, 400, 400):

Objective-C

POPSpringAnimation *anim = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerBounds];
anim.toValue = [NSValue valueWithCGRect:CGRectMake(0, 0, 400, 400)];
[layer pop_addAnimation:anim forKey:@"size"];

Swift

if let anim = POPSpringAnimation(propertyNamed: kPOPLayerBounds) {
    anim.toValue = NSValue(cgRect: CGRect(x: 0, y: 0, width: 400, height: 400))
    layer.pop_add(anim, forKey: "size")
}

Decay animations can be used to gradually slow an object to a halt. In this example, we decay a layer's positionX from it's current value and velocity 1000pts per second:

Objective-C

POPDecayAnimation *anim = [POPDecayAnimation animationWithPropertyNamed:kPOPLayerPositionX];
anim.velocity = @(1000.);
[layer pop_addAnimation:anim forKey:@"slide"];

Swift

if let anim = POPDecayAnimation(propertyNamed: kPOPLayerPositionX) {
    anim.velocity = 1000.0
    layer.pop_add(anim, forKey: "slide")
}

Basic animations can be used to interpolate values over a specified time period. To use an ease-in ease-out animation to animate a view's alpha from 0.0 to 1.0 over the default duration:

Objective-C

POPBasicAnimation *anim = [POPBasicAnimation animationWithPropertyNamed:kPOPViewAlpha];
anim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
anim.fromValue = @(0.0);
anim.toValue = @(1.0);
[view pop_addAnimation:anim forKey:@"fade"];

Swift

if let anim = POPBasicAnimation(propertyNamed: kPOPViewAlpha) {
    anim.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
    anim.fromValue = 0.0
    anim.toValue = 1.0
    view.pop_add(anim, forKey: "fade")
}

POPCustomAnimation makes creating custom animations and transitions easier by handling CADisplayLink and associated time-step management. See header for more details.

Properties

The property animated is specified by the POPAnimatableProperty class. In this example we create a spring animation and explicitly set the animatable property corresponding to -[CALayer bounds]:

Objective-C

POPSpringAnimation *anim = [POPSpringAnimation animation];
anim.property = [POPAnimatableProperty propertyWithName:kPOPLayerBounds];

Swift

let anim = POPSpringAnimation()
if let property = POPAnimatableProperty.property(withName: kPOPLayerBounds) as? POPAnimatableProperty {
    anim.property = property
}

The framework provides many common layer and view animatable properties out of box. You can animate a custom property by creating a new instance of the class. In this example, we declare a custom volume property:

Objective-C

prop = [POPAnimatableProperty propertyWithName:@"com.foo.radio.volume" initializer:^(POPMutableAnimatableProperty *prop) {
  // read value
  prop.readBlock = ^(id obj, CGFloat values[]) {
    values[0] = [obj volume];
  };
  // write value
  prop.writeBlock = ^(id obj, const CGFloat values[]) {
    [obj setVolume:values[0]];
  };
  // dynamics threshold
  prop.threshold = 0.01;
}];

anim.property = prop;

Swift

if let prop = POPAnimatableProperty.property(withName: "com.foo.radio.volume", initializer: { prop in
    guard let prop = prop else {
        return
    }
    // read value
    prop.readBlock = { obj, values in
        guard let obj = obj as? Volumeable, let values = values else {
            return
        }

        values[0] = obj.volume
    }
    // write value
    prop.writeBlock = { obj, values in
        guard var obj = obj as? Volumeable, let values = values else {
            return
        }

        obj.volume = values[0]
    }
    // dynamics threshold
    prop.threshold = 0.01
}) as? POPAnimatableProperty {
    anim.property = prop
}

For a complete listing of provided animatable properties, as well more information on declaring custom properties see POPAnimatableProperty.h.

Debugging

Here are a few tips when debugging. Pop obeys the Simulator's Toggle Slow Animations setting. Try enabling it to slow down animations and more easily observe interactions.

Consider naming your animations. This will allow you to more easily identify them when referencing them, either via logging or in the debugger:

Objective-C

anim.name = @"springOpen";

Swift

anim.name = "springOpen"

Each animation comes with an associated tracer. The tracer allows you to record all animation-related events, in a fast and efficient manner, allowing you to query and analyze them after animation completion. The below example starts the tracer and configures it to log all events on animation completion:

Objective-C

POPAnimationTracer *tracer = anim.tracer;
tracer.shouldLogAndResetOnCompletion = YES;
[tracer start];

Swift

if let tracer = anim.tracer {
    tracer.shouldLogAndResetOnCompletion = true
    tracer.start()
}

See POPAnimationTracer.h for more details.

Testing

Pop has extensive unit test coverage. To install test dependencies, navigate to the root pop directory and type:

pod install

Assuming CocoaPods is installed, this will include the necessary OCMock dependency to the unit test targets.

SceneKit

Due to SceneKit requiring iOS 8 and OS X 10.9, POP's SceneKit extensions aren't provided out of box. Unfortunately, weakly linked frameworks cannot be used due to issues mentioned in the Xcode 6.1 Release Notes.

To remedy this, you can easily opt-in to use SceneKit! Simply add this to the Preprocessor Macros section of your Xcode Project:

POP_USE_SCENEKIT=1

Resources

A collection of links to external resources that may prove valuable:

Contributing

See the CONTRIBUTING file for how to help out.

License

Pop is released under a BSD License. See LICENSE file for details.

pop's People

Contributors

ashton-w avatar b3ll avatar bdaz avatar codeman9 avatar crylico avatar ejensen avatar ericallam avatar grp avatar hfossli avatar jack-stripe avatar lhecker avatar lukemelia avatar matthewcheok avatar mattjgalloway avatar michaellutaaya avatar nicopasso avatar nlutsenko avatar nsfmc avatar ole avatar owenv avatar patr1ck avatar pkamb avatar ruiaaperes avatar sergiou87 avatar shaharhd avatar sugarmo avatar toulouse avatar waltflanagan avatar warpling avatar zats 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  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

pop's Issues

Basic animations are not supporting animating CGColor

When you try to animated a CGColor using POPBasicAnimation you get an assert that the type is un-handled.

Easy fix is to add the kPOPValueColor case to the interpolate function in the POPBasicAnimationInternal.h file. Colors are just another 4 value data (like rect) so no special handling needed. Tested the proposed fix on my local branch and works fine.

Can't build POP on a case sensitive file system

Hey,

I can't build my projects with cocoa pods
For instance AGGeometryKit+POP,I keep getting the error:

.../AGGeometryKit-POP/Demo/Pods/pop/pop/POPAnimationExtras.h:12:9: 'POP/POPDefines.h' file not found

In addition, it looks like you are using inconsistently internal imports "...h" and library imports <...h>

For instance

import <POP/POPDefines.h> in POPLayerExtras.h

and

import "POPDefines.h" in PopCGUtils.h

Thanks ahead,

Stéphane

/cc @orta

Pop Animation Bug - Locks Up Animation - Intermittent Working Behavior

I have a bug with Pop animations and Cocos2d.

The Pop animations stop working for me intermittently. I'm using them to create snapping behavior for my game user interface in Bomb Dodge

Sometimes on start and sometimes on screen transitions or screen rotations the POP animations will stop working altogether. They don't always become functional until I restart the app, rotate it, or pull up the Control Center.

The animations are failing to fire in some cases, but I can't consistently reproduce the bug. It seems to be correlated to having the Cocos2D game engine running at 60 FPS in the background, but it works half of the time.

I've uploaded a test project to try and highlight the issue that you can download here.
https://github.com/PaulSolt/PopAnimationBug

The buttons don't always slide to their final destination. This causes them to sit funny on-screen, or in Bomb Dodge, not even appear on screen after a transition. There is a pan gesture attached to the buttons that should snap the button back to it's original center, but that fails when Pop locks up.a

pop animation stopped
snap after pan gesture does not work

Provide a way to chain animations

A great addition to this library would be to provide a way to chain animations by passing an array of POPAnimation instances to [POPAnimator sharedAnimator] for example.

POPAnimatableProperty missing NSLayoutConstraint.h import?

I can't compile the OSX framework NSLayoutConstraint is used in POPAnimatableProperty. There is no import at the top of the file like there is for UIView and UITableView.h

#if TARGET_OS_IPHONE

#import <UIKit/UIView.h>
#import <UIKit/UITableView.h>

#else

#import <AppKit/NSLayoutConstraint.h>

#endif

POPDecayAnimation duration isn't calculated as expected

When a POPDecayAnimation is set up and you try to query the duration property, it always returns 0. The reason for this is that the _POPDecayAnimationState::computeDestinationValues() doesn't compute it as there is no fromVec not currentVec, which are not needed to calculate it.

The easy fix would be to move the calculation of the duration before checking for the fromValue. There is no harm to do that as the duration isn't dependant on that value. The proposed fix was tested on my local version and works.

This will allow getting the duration before the animation is started (associated with an object) which then can be used to calculate duration of dependant animations/actions.

Demos?

Pop looks amazing. It would be really awesome if there was a demo app or two in here, showing off some of the great things that it can do.

Linking with standard C++ libraries

I had to add the "-lstdc++" linker flag to my build settings in order to have my project link with the C++ libraries. If this were added to the Readme, it could help other people out.

beginTime issues

I have been trying to create a bundle of animations where each happen after some time. The current animations looks like this:

The "opening" animation is created with the following:

    POPSpringAnimation *springAnimation = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerSize];
    springAnimation.springBounciness = 20;
    springAnimation.toValue = [NSValue valueWithCGSize:DefaultSize];
    [button.layer pop_addAnimation:springAnimation forKey:@"sizeAnimation"];

    POPBasicAnimation *alphaAnimation = [POPBasicAnimation animationWithPropertyNamed:kPOPLayerOpacity];
    alphaAnimation.toValue = @(1);
    [button.layer pop_addAnimation:alphaAnimation forKey:@"opacityAnimation"];

The problem here is that springAnimation.beginTime = ...; doesn't seem to be working, since all animations start at the same time. In order to solve this I went with:

 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (idx *0.25) * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
               // Call animation block
            });

Animate NSLayoutConstraint

Is it possible to use POP to animate a NSLayoutConstraint's constant property? I've had trouble finding examples of this working with CABasicAnimation, but was hoping it was possible. Any thoughts?

Installing from Cocoapods, Get Linker Errors with 1.0.1

Getting the following linker errors when trying to build with pop 1.0.1 from CocoaPods


Undefined symbols for architecture i386:
  "std::__1::__vector_base_common<true>::__throw_length_error() const", referenced from:
      std::__1::vector<std::__1::shared_ptr<POPAnimatorItem>, std::__1::allocator<std::__1::shared_ptr<POPAnimatorItem> > >::allocate(unsigned long) in libPods-ActionEntryProto.a(POPAnimator.o)
  "std::__1::__shared_weak_count::__add_shared()", referenced from:
      -[POPDecayAnimation toValue] in libPods-ActionEntryProto.a(POPDecayAnimation.o)
      -[POPDecayAnimation velocity] in libPods-ActionEntryProto.a(POPDecayAnimation.o)
      -[POPDecayAnimation setVelocity:] in libPods-ActionEntryProto.a(POPDecayAnimation.o)
      _POPDecayAnimationState::computeDestinationValues() in libPods-ActionEntryProto.a(POPDecayAnimation.o)
      _POPDecayAnimationState::isDone() in libPods-ActionEntryProto.a(POPDecayAnimation.o)
      _POPPropertyAnimationState::willRun(bool, objc_object*) in libPods-ActionEntryProto.a(POPDecayAnimation.o)
      _POPPropertyAnimationState::computeProgress() in libPods-ActionEntryProto.a(POPDecayAnimation.o)
      ...
  "std::__1::__shared_weak_count::__release_shared()", referenced from:
      std::__1::shared_ptr<POP::Vector const>::~shared_ptr() in libPods-ActionEntryProto.a(POPDecayAnimation.o)
      std::__1::shared_ptr<POP::Vector>::~shared_ptr() in libPods-ActionEntryProto.a(POPDecayAnimation.o)
      std::__1::shared_ptr<POP::Vector>::~shared_ptr() in libPods-ActionEntryProto.a(POPBasicAnimation.o)
      std::__1::shared_ptr<POP::Vector const>::~shared_ptr() in libPods-ActionEntryProto.a(POPBasicAnimation.o)
      std::__1::shared_ptr<POP::Vector const>::~shared_ptr() in libPods-ActionEntryProto.a(POPPropertyAnimation.o)
      std::__1::shared_ptr<POP::Vector>::~shared_ptr() in libPods-ActionEntryProto.a(POPPropertyAnimation.o)
      std::__1::shared_ptr<POPAnimatorItem>::~shared_ptr() in libPods-ActionEntryProto.a(POPAnimator.o)
      ...
  "std::__1::__shared_weak_count::~__shared_weak_count()", referenced from:
      std::__1::__shared_ptr_pointer<POP::Vector*, std::__1::default_delete<POP::Vector>, std::__1::allocator<POP::Vector> >::~__shared_ptr_pointer() in libPods-ActionEntryProto.a(POPDecayAnimation.o)
      std::__1::__shared_ptr_pointer<POP::Vector*, std::__1::default_delete<POP::Vector>, std::__1::allocator<POP::Vector> >::~__shared_ptr_pointer() in libPods-ActionEntryProto.a(POPBasicAnimation.o)
      std::__1::__shared_ptr_pointer<POP::Vector*, std::__1::default_delete<POP::Vector>, std::__1::allocator<POP::Vector> >::~__shared_ptr_pointer() in libPods-ActionEntryProto.a(POPPropertyAnimation.o)
      std::__1::__shared_ptr_pointer<POPAnimatorItem*, std::__1::default_delete<POPAnimatorItem>, std::__1::allocator<POPAnimatorItem> >::~__shared_ptr_pointer() in libPods-ActionEntryProto.a(POPAnimator.o)
      std::__1::__shared_ptr_pointer<POP::Vector*, std::__1::default_delete<POP::Vector>, std::__1::allocator<POP::Vector> >::~__shared_ptr_pointer() in libPods-ActionEntryProto.a(POPAnimator.o)
      std::__1::__shared_ptr_pointer<POP::Vector*, std::__1::default_delete<POP::Vector>, std::__1::allocator<POP::Vector> >::~__shared_ptr_pointer() in libPods-ActionEntryProto.a(POPSpringAnimation.o)
      std::__1::__shared_ptr_pointer<POP::Vector*, std::__1::default_delete<POP::Vector>, std::__1::allocator<POP::Vector> >::~__shared_ptr_pointer() in libPods-ActionEntryProto.a(POPAnimationRuntime.o)
      ...
  "std::terminate()", referenced from:
      ___clang_call_terminate in libPods-ActionEntryProto.a(POPDecayAnimation.o)
      ___clang_call_terminate in libPods-ActionEntryProto.a(POPBasicAnimation.o)
      ___clang_call_terminate in libPods-ActionEntryProto.a(POPPropertyAnimation.o)
      ___clang_call_terminate in libPods-ActionEntryProto.a(POPAnimator.o)
      ___clang_call_terminate in libPods-ActionEntryProto.a(POPSpringAnimation.o)
      ___clang_call_terminate in libPods-ActionEntryProto.a(POPAnimation.o)
      ___clang_call_terminate in libPods-ActionEntryProto.a(POPAnimationRuntime.o)
      ...
  "typeinfo for std::__1::__shared_weak_count", referenced from:
      typeinfo for std::__1::__shared_ptr_pointer<POP::Vector*, std::__1::default_delete<POP::Vector>, std::__1::allocator<POP::Vector> > in libPods-ActionEntryProto.a(POPDecayAnimation.o)
      typeinfo for std::__1::__shared_ptr_pointer<POP::Vector*, std::__1::default_delete<POP::Vector>, std::__1::allocator<POP::Vector> > in libPods-ActionEntryProto.a(POPBasicAnimation.o)
      typeinfo for std::__1::__shared_ptr_pointer<POP::Vector*, std::__1::default_delete<POP::Vector>, std::__1::allocator<POP::Vector> > in libPods-ActionEntryProto.a(POPPropertyAnimation.o)
      typeinfo for std::__1::__shared_ptr_pointer<POPAnimatorItem*, std::__1::default_delete<POPAnimatorItem>, std::__1::allocator<POPAnimatorItem> > in libPods-ActionEntryProto.a(POPAnimator.o)
      typeinfo for std::__1::__shared_ptr_pointer<POP::Vector*, std::__1::default_delete<POP::Vector>, std::__1::allocator<POP::Vector> > in libPods-ActionEntryProto.a(POPAnimator.o)
      typeinfo for std::__1::__shared_ptr_pointer<POP::Vector*, std::__1::default_delete<POP::Vector>, std::__1::allocator<POP::Vector> > in libPods-ActionEntryProto.a(POPSpringAnimation.o)
      typeinfo for std::__1::__shared_ptr_pointer<POP::Vector*, std::__1::default_delete<POP::Vector>, std::__1::allocator<POP::Vector> > in libPods-ActionEntryProto.a(POPAnimationRuntime.o)
      ...
  "vtable for __cxxabiv1::__class_type_info", referenced from:
      typeinfo for std::__1::default_delete<POP::Vector> in libPods-ActionEntryProto.a(POPDecayAnimation.o)
      typeinfo for _POPAnimationState in libPods-ActionEntryProto.a(POPDecayAnimation.o)
      typeinfo for _POPAnimationState in libPods-ActionEntryProto.a(POPBasicAnimation.o)
      typeinfo for std::__1::default_delete<POP::Vector> in libPods-ActionEntryProto.a(POPBasicAnimation.o)
      typeinfo for std::__1::default_delete<POP::Vector> in libPods-ActionEntryProto.a(POPPropertyAnimation.o)
      typeinfo for _POPAnimationState in libPods-ActionEntryProto.a(POPPropertyAnimation.o)
      typeinfo for std::__1::default_delete<POPAnimatorItem> in libPods-ActionEntryProto.a(POPAnimator.o)
      ...
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
  "vtable for __cxxabiv1::__si_class_type_info", referenced from:
      typeinfo for std::__1::__shared_ptr_pointer<POP::Vector*, std::__1::default_delete<POP::Vector>, std::__1::allocator<POP::Vector> > in libPods-ActionEntryProto.a(POPDecayAnimation.o)
      typeinfo for _POPPropertyAnimationState in libPods-ActionEntryProto.a(POPDecayAnimation.o)
      typeinfo for _POPDecayAnimationState in libPods-ActionEntryProto.a(POPDecayAnimation.o)
      typeinfo for _POPPropertyAnimationState in libPods-ActionEntryProto.a(POPBasicAnimation.o)
      typeinfo for _POPBasicAnimationState in libPods-ActionEntryProto.a(POPBasicAnimation.o)
      typeinfo for std::__1::__shared_ptr_pointer<POP::Vector*, std::__1::default_delete<POP::Vector>, std::__1::allocator<POP::Vector> > in libPods-ActionEntryProto.a(POPBasicAnimation.o)
      typeinfo for std::__1::__shared_ptr_pointer<POP::Vector*, std::__1::default_delete<POP::Vector>, std::__1::allocator<POP::Vector> > in libPods-ActionEntryProto.a(POPPropertyAnimation.o)
      ...
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
  "vtable for std::__1::__shared_count", referenced from:
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPDecayAnimation.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPBasicAnimation.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPPropertyAnimation.o)
      std::__1::shared_ptr<POPAnimatorItem>::shared_ptr<POPAnimatorItem, void>(POPAnimatorItem*) in libPods-ActionEntryProto.a(POPAnimator.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPAnimator.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPSpringAnimation.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPAnimationRuntime.o)
      ...
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPDecayAnimation.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPBasicAnimation.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPPropertyAnimation.o)
      std::__1::shared_ptr<POPAnimatorItem>::shared_ptr<POPAnimatorItem, void>(POPAnimatorItem*) in libPods-ActionEntryProto.a(POPAnimator.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPAnimator.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPSpringAnimation.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPAnimationRuntime.o)
      ...
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPDecayAnimation.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPBasicAnimation.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPPropertyAnimation.o)
      std::__1::shared_ptr<POPAnimatorItem>::shared_ptr<POPAnimatorItem, void>(POPAnimatorItem*) in libPods-ActionEntryProto.a(POPAnimator.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPAnimator.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPSpringAnimation.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPAnimationRuntime.o)
      ...
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPDecayAnimation.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPBasicAnimation.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPPropertyAnimation.o)
      std::__1::shared_ptr<POPAnimatorItem>::shared_ptr<POPAnimatorItem, void>(POPAnimatorItem*) in libPods-ActionEntryProto.a(POPAnimator.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPAnimator.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPSpringAnimation.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPAnimationRuntime.o)
      ...
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPDecayAnimation.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPBasicAnimation.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPPropertyAnimation.o)
      std::__1::shared_ptr<POPAnimatorItem>::shared_ptr<POPAnimatorItem, void>(POPAnimatorItem*) in libPods-ActionEntryProto.a(POPAnimator.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPAnimator.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPSpringAnimation.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPAnimationRuntime.o)
      ...
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPDecayAnimation.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPBasicAnimation.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPPropertyAnimation.o)
      std::__1::shared_ptr<POPAnimatorItem>::shared_ptr<POPAnimatorItem, void>(POPAnimatorItem*) in libPods-ActionEntryProto.a(POPAnimator.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPAnimator.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPSpringAnimation.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPAnimationRuntime.o)
      ...
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
  "vtable for std::__1::__shared_weak_count", referenced from:
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPDecayAnimation.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPBasicAnimation.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPPropertyAnimation.o)
      std::__1::shared_ptr<POPAnimatorItem>::shared_ptr<POPAnimatorItem, void>(POPAnimatorItem*) in libPods-ActionEntryProto.a(POPAnimator.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPAnimator.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPSpringAnimation.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPAnimationRuntime.o)
      ...
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPDecayAnimation.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPBasicAnimation.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPPropertyAnimation.o)
      std::__1::shared_ptr<POPAnimatorItem>::shared_ptr<POPAnimatorItem, void>(POPAnimatorItem*) in libPods-ActionEntryProto.a(POPAnimator.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPAnimator.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPSpringAnimation.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPAnimationRuntime.o)
      ...
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPDecayAnimation.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPBasicAnimation.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPPropertyAnimation.o)
      std::__1::shared_ptr<POPAnimatorItem>::shared_ptr<POPAnimatorItem, void>(POPAnimatorItem*) in libPods-ActionEntryProto.a(POPAnimator.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPAnimator.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPSpringAnimation.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPAnimationRuntime.o)
      ...
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPDecayAnimation.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPBasicAnimation.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPPropertyAnimation.o)
      std::__1::shared_ptr<POPAnimatorItem>::shared_ptr<POPAnimatorItem, void>(POPAnimatorItem*) in libPods-ActionEntryProto.a(POPAnimator.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPAnimator.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPSpringAnimation.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPAnimationRuntime.o)
      ...
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPDecayAnimation.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPBasicAnimation.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPPropertyAnimation.o)
      std::__1::shared_ptr<POPAnimatorItem>::shared_ptr<POPAnimatorItem, void>(POPAnimatorItem*) in libPods-ActionEntryProto.a(POPAnimator.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPAnimator.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPSpringAnimation.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPAnimationRuntime.o)
      ...
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPDecayAnimation.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPBasicAnimation.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPPropertyAnimation.o)
      std::__1::shared_ptr<POPAnimatorItem>::shared_ptr<POPAnimatorItem, void>(POPAnimatorItem*) in libPods-ActionEntryProto.a(POPAnimator.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPAnimator.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPSpringAnimation.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPAnimationRuntime.o)
      ...
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
  "operator delete(void*)", referenced from:
      -[POPDecayAnimation _initState] in libPods-ActionEntryProto.a(POPDecayAnimation.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPDecayAnimation.o)
      std::__1::__shared_ptr_pointer<POP::Vector*, std::__1::default_delete<POP::Vector>, std::__1::allocator<POP::Vector> >::~__shared_ptr_pointer() in libPods-ActionEntryProto.a(POPDecayAnimation.o)
      std::__1::__shared_ptr_pointer<POP::Vector*, std::__1::default_delete<POP::Vector>, std::__1::allocator<POP::Vector> >::__on_zero_shared() in libPods-ActionEntryProto.a(POPDecayAnimation.o)
      std::__1::__shared_ptr_pointer<POP::Vector*, std::__1::default_delete<POP::Vector>, std::__1::allocator<POP::Vector> >::__on_zero_shared_weak() in libPods-ActionEntryProto.a(POPDecayAnimation.o)
      _POPDecayAnimationState::~_POPDecayAnimationState() in libPods-ActionEntryProto.a(POPDecayAnimation.o)
      _POPPropertyAnimationState::~_POPPropertyAnimationState() in libPods-ActionEntryProto.a(POPDecayAnimation.o)
      ...
  "operator new(unsigned long)", referenced from:
      -[POPDecayAnimation _initState] in libPods-ActionEntryProto.a(POPDecayAnimation.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPDecayAnimation.o)
      -[POPBasicAnimation _initState] in libPods-ActionEntryProto.a(POPBasicAnimation.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPBasicAnimation.o)
      -[POPPropertyAnimation _initState] in libPods-ActionEntryProto.a(POPPropertyAnimation.o)
      std::__1::shared_ptr<POP::Vector>::shared_ptr<POP::Vector, void>(POP::Vector*) in libPods-ActionEntryProto.a(POPPropertyAnimation.o)
      -[POPAnimator addAnimation:forObject:key:] in libPods-ActionEntryProto.a(POPAnimator.o)
      ...
  "___cxa_begin_catch", referenced from:
      ___clang_call_terminate in libPods-ActionEntryProto.a(POPDecayAnimation.o)
      ___clang_call_terminate in libPods-ActionEntryProto.a(POPBasicAnimation.o)
      ___clang_call_terminate in libPods-ActionEntryProto.a(POPPropertyAnimation.o)
      ___clang_call_terminate in libPods-ActionEntryProto.a(POPAnimator.o)
      ___clang_call_terminate in libPods-ActionEntryProto.a(POPSpringAnimation.o)
      ___clang_call_terminate in libPods-ActionEntryProto.a(POPAnimation.o)
      ___clang_call_terminate in libPods-ActionEntryProto.a(POPAnimationRuntime.o)
      ...
  "___dynamic_cast", referenced from:
      applyAnimationTime(objc_object*, _POPAnimationState*, double) in libPods-ActionEntryProto.a(POPAnimator.o)
      applyAnimationProgress(objc_object*, _POPAnimationState*, float) in libPods-ActionEntryProto.a(POPAnimator.o)
  "___gxx_personality_v0", referenced from:
      Dwarf Exception Unwind Info (__eh_frame) in libPods-ActionEntryProto.a(POPAnimatableProperty.o)
      Dwarf Exception Unwind Info (__eh_frame) in libPods-ActionEntryProto.a(POPDecayAnimation.o)
      Dwarf Exception Unwind Info (__eh_frame) in libPods-ActionEntryProto.a(POPAnimationEvent.o)
      Dwarf Exception Unwind Info (__eh_frame) in libPods-ActionEntryProto.a(POPBasicAnimation.o)
      Dwarf Exception Unwind Info (__eh_frame) in libPods-ActionEntryProto.a(POPCustomAnimation.o)
      Dwarf Exception Unwind Info (__eh_frame) in libPods-ActionEntryProto.a(POPPropertyAnimation.o)
      Dwarf Exception Unwind Info (__eh_frame) in libPods-ActionEntryProto.a(POPAnimationTracer.o)
      ...
      Dwarf Exception Unwind Info (__eh_frame) in libPods-ActionEntryProto.a(POPAnimatableProperty.o)
      Dwarf Exception Unwind Info (__eh_frame) in libPods-ActionEntryProto.a(POPDecayAnimation.o)
      Dwarf Exception Unwind Info (__eh_frame) in libPods-ActionEntryProto.a(POPAnimationEvent.o)
      Dwarf Exception Unwind Info (__eh_frame) in libPods-ActionEntryProto.a(POPBasicAnimation.o)
      Dwarf Exception Unwind Info (__eh_frame) in libPods-ActionEntryProto.a(POPCustomAnimation.o)
      Dwarf Exception Unwind Info (__eh_frame) in libPods-ActionEntryProto.a(POPPropertyAnimation.o)
      Dwarf Exception Unwind Info (__eh_frame) in libPods-ActionEntryProto.a(POPAnimationTracer.o)
      ...
      Dwarf Exception Unwind Info (__eh_frame) in libPods-ActionEntryProto.a(POPAnimatableProperty.o)
      Dwarf Exception Unwind Info (__eh_frame) in libPods-ActionEntryProto.a(POPDecayAnimation.o)
      Dwarf Exception Unwind Info (__eh_frame) in libPods-ActionEntryProto.a(POPAnimationEvent.o)
      Dwarf Exception Unwind Info (__eh_frame) in libPods-ActionEntryProto.a(POPBasicAnimation.o)
      Dwarf Exception Unwind Info (__eh_frame) in libPods-ActionEntryProto.a(POPCustomAnimation.o)
      Dwarf Exception Unwind Info (__eh_frame) in libPods-ActionEntryProto.a(POPPropertyAnimation.o)
      Dwarf Exception Unwind Info (__eh_frame) in libPods-ActionEntryProto.a(POPAnimationTracer.o)
      ...
      Dwarf Exception Unwind Info (__eh_frame) in libPods-ActionEntryProto.a(POPAnimatableProperty.o)
      Dwarf Exception Unwind Info (__eh_frame) in libPods-ActionEntryProto.a(POPDecayAnimation.o)
      Dwarf Exception Unwind Info (__eh_frame) in libPods-ActionEntryProto.a(POPAnimationEvent.o)
      Dwarf Exception Unwind Info (__eh_frame) in libPods-ActionEntryProto.a(POPBasicAnimation.o)
      Dwarf Exception Unwind Info (__eh_frame) in libPods-ActionEntryProto.a(POPCustomAnimation.o)
      Dwarf Exception Unwind Info (__eh_frame) in libPods-ActionEntryProto.a(POPPropertyAnimation.o)
      Dwarf Exception Unwind Info (__eh_frame) in libPods-ActionEntryProto.a(POPAnimationTracer.o)
      ...
      Dwarf Exception Unwind Info (__eh_frame) in libPods-ActionEntryProto.a(POPAnimatableProperty.o)
      Dwarf Exception Unwind Info (__eh_frame) in libPods-ActionEntryProto.a(POPDecayAnimation.o)
      Dwarf Exception Unwind Info (__eh_frame) in libPods-ActionEntryProto.a(POPAnimationEvent.o)
      Dwarf Exception Unwind Info (__eh_frame) in libPods-ActionEntryProto.a(POPBasicAnimation.o)
      Dwarf Exception Unwind Info (__eh_frame) in libPods-ActionEntryProto.a(POPCustomAnimation.o)
      Dwarf Exception Unwind Info (__eh_frame) in libPods-ActionEntryProto.a(POPPropertyAnimation.o)
      Dwarf Exception Unwind Info (__eh_frame) in libPods-ActionEntryProto.a(POPAnimationTracer.o)
      ...
      Dwarf Exception Unwind Info (__eh_frame) in libPods-ActionEntryProto.a(POPAnimatableProperty.o)
      Dwarf Exception Unwind Info (__eh_frame) in libPods-ActionEntryProto.a(POPDecayAnimation.o)
      Dwarf Exception Unwind Info (__eh_frame) in libPods-ActionEntryProto.a(POPAnimationEvent.o)
      Dwarf Exception Unwind Info (__eh_frame) in libPods-ActionEntryProto.a(POPBasicAnimation.o)
      Dwarf Exception Unwind Info (__eh_frame) in libPods-ActionEntryProto.a(POPCustomAnimation.o)
      Dwarf Exception Unwind Info (__eh_frame) in libPods-ActionEntryProto.a(POPPropertyAnimation.o)
      Dwarf Exception Unwind Info (__eh_frame) in libPods-ActionEntryProto.a(POPAnimationTracer.o)
      ...
      Dwarf Exception Unwind Info (__eh_frame) in libPods-ActionEntryProto.a(POPAnimatableProperty.o)
      Dwarf Exception Unwind Info (__eh_frame) in libPods-ActionEntryProto.a(POPDecayAnimation.o)
      Dwarf Exception Unwind Info (__eh_frame) in libPods-ActionEntryProto.a(POPAnimationEvent.o)
      Dwarf Exception Unwind Info (__eh_frame) in libPods-ActionEntryProto.a(POPBasicAnimation.o)
      Dwarf Exception Unwind Info (__eh_frame) in libPods-ActionEntryProto.a(POPCustomAnimation.o)
      Dwarf Exception Unwind Info (__eh_frame) in libPods-ActionEntryProto.a(POPPropertyAnimation.o)
      Dwarf Exception Unwind Info (__eh_frame) in libPods-ActionEntryProto.a(POPAnimationTracer.o)
      ...
      ...
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Showing first 200 notices only

'Example' project does not properly animate opacity on 64-bit iOS devices

The example project animates an opacity property in the AppDelegate. On iPad Mini Retina the value logged is always 0.0.
This is due to a mismatch between the selector used by the compiler at the call site for setOpacity which is using CALayer setOpacity:(float)opacity and the call target which uses setOpacity:(CGFloat)opacity. float is 32bit on iOS, CGFloat depends on the architecture so is 64bit in this case. The fix is to declare setOpacity in AppDelegate as...

- (void)setOpacity:(float)aFloat

It seems that the animatable properties are underspecified, and there should be explicit documentation about the exact type for each animated property.

AGGeometryKit+POP

Hi

Don't know what the appropriate channel for stuff like this is.

Latest version of AGGeometryKit 1.0 in a combo with POP lets you animate in a quite different manner than what is currently common.

See this video
https://vimeo.com/95383807

And visit the repo
https://github.com/hfossli/AGGeometryKit-Pop

If you are sitting there asking yourself why this is a good idea, then this might get you spinning
https://vimeo.com/93206523

I'm curious to hear your feedback on this. And especially if there are some improvements to be made in regards to the interface of POPAnimatableProperty+AGGeometryKit.h

POPBasicAnimation jumps to final position at the end

Running the following code animates the view as expected, but just at the end (the last update to center) the view jumps to the final position (i.e. the last distance is greater than expected):

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 10, 10)];
view.backgroundColor = [UIColor redColor];
[self.view addSubview:view];

POPBasicAnimation *animation = [POPBasicAnimation animationWithPropertyNamed:kPOPViewCenter];
animation.toValue = [NSValue valueWithCGPoint:CGPointMake(self.view.bounds.size.width-20, self.view.bounds.size.height-20)];
animation.duration = 1;
[view pop_addAnimation:animation forKey:@"animation"];

Slow animations on device when using ScaleXY property

Hi,
I have the following issue:

I'm using a POPBasicAnimation to animate the ScaleXY property of a label to make it "pop up".
This is my code:

POPBasicAnimation *anim = [POPBasicAnimation animationWithPropertyNamed:kPOPLayerScaleXY];
anim.fromValue = [NSValue valueWithCGPoint:CGPointMake(0.0f, 0.0f)];
anim.toValue = [NSValue valueWithCGPoint:CGPointMake(1.0f, 1.0f)];
anim.beginTime = CACurrentMediaTime() + 1.0f;
anim.duration = 1.0f;
[self.countdownLabel.layer pop_addAnimation:anim forKey:@"size"];

self.countdownLabel is an iBOutlet connected to a UILabel in my Storyboard. I don't want to use AutoLayout in my Storyboard, thus it is turned off. The Animation works perfectly in the Simulator peaking at ~27% CPU usage but when I run my app on my iPad, the animation is slow as hell and CPU usage explodes to 100%. If I turn on AutoLayout, the animation runs smooth on both the simulator and the device. I've tested different animation properties, such as kPOPLayerPosition and the animation is smooth on both simulator and device, regardless of AutoLayout. This seems to be an issue between pop and AutoLayout :\

The Animation is so slow, it feels like 2-3 fps. This can't be my iPads fault, since other animations work fine too. (It's an iPad 3 btw)

I couldn't figure out why this happens yet and any help I can get is appreciated! :)

Thanks in advance!

kPOPViewScaleXY issue when view's scale set to [0.0, 0.0] to start

Hey guys, I've been trying to animate a button's scale from 0.0 to 1.0 all evening and I think I may have ran into an issue.

What I'm trying to accomplish is to add a button to my view hierarchy with a 0.0 (invisibly small) scale to start, and then animate it up to 1.0 so it bounces into view on the screen. Here's what my code looks like

// Boring boilerplate code to create a button and add to a view, then...
myButton.transform = CGAffineTransformMakeScale(0.0, 0.0);

POPSpringAnimation *animation = [POPSpringAnimation animation];
animation.property = [POPAnimatableProperty propertyWithName:kPOPViewScaleXY];
animation.fromValue = [NSValue valueWithCGPoint:CGPointMake(0.0f, 0.0f)];
animation.toValue = [NSValue valueWithCGPoint:CGPointMake(1.0f, 1.0f)];
animation.springBounciness = 20.0f;
animation.springSpeed = 3.0f;
[myButton pop_addAnimation:animation forKey:@"bounce"];

So this code doesn't work, the button stays at 0.0 scale. In fact it doesn't matter what I set as my fromValue and toValue if I set the initial transform to a [0.0, 0.0] scale. If I don't set the initial scale to 0.0 then it works and I can animate the button, but that defeats the purpose since I want the button to be at 0.0 scale as it lands in the view hierarchy, then animate from 0.0 to 1.0 so its initial appearance is bouncy and delightful.

What I've found is if I set my initial scale to something extremely small, but non-zero (like CGAffineTransformMakeScale(0.001, 0.001)) then it'll work nicely. It seems there's an issue with a layer's initial transform scale being 0 vs. a non-zero number and the interpolation Pop provides to scale it up to the toValue.

I'm extremely new to Pop (as I'm sure many people are today!) so please let me know if I'm missing something trivial or not using the framework in a common manner.

Thanks!
Mike

Add ability to animate NSView properties on OSX

Apple doesn't recommend to animate directly the layer bounds for example as it is disconnected from the NSView bounds. For example if you animate the position of the NSView root layer, it doesn't update the NSView frame and therefore the NSView is not interactive anymore as it is out of bounds from the NSView point of view. a workaround is to set the NSView frame to the new position manually but this is painful and very confusing.

Looks like POP is not really "ready" for OSX :)

WebCore linker errors

I'm getting the following linker error after adding pop to a new project:
"WebCore::TransformationMatrix::recompose(WebCore::TransformationMatrix::DecomposedType const&, bool)", referenced from:

Bug in POPSpringAnimation in OSX (Model Layer not updated when animation complete)

Using the POPSpringAnimation works fine, the Presentation Layer is updated and shows the animation however when the animation is done, when interacting with the NSView that was just animated the view disappear suddenly. the Problem is that the "Model Layer" is never updated to the "toValue".
The workaround is to set the end value when the animation is complete. Here an example:

CGRect destRect = CGRectMake(0,0,300,300);
POPSpringAnimation *bounceAnim = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerBounds];
    bounceAnim.fromValue = [NSValue valueWithCGRect:CGRectMake(0,0,0,0)];
    bounceAnim.toValue = [NSValue valueWithCGRect:destRect];
    bounceAnim.springBounciness = 7;
    bounceAnim.springSpeed = 20;
    [bounceSize setCompletionBlock:^(POPAnimation *anim, BOOL finished) {
        [sizeButton.layer setBounds:destRect]; //<<---- WORKAROUND 
    }];
    [sizeButton.layer pop_addAnimation: bounceAnim forKey:@"bounceAnim"];

Does pop support keyframe animations?

Apologies if I have missed something obvious.

I was wondering if there was an equivalent to CAKeyframeAnimation or if its possible to do using a custom animation?

Undefined symbols for architecture arm64:

I'm integrating POP with CocoaPods.

Undefined symbols for architecture arm64:
"_dynamic_cast", referenced from:
applyAnimationTime(objc_object
, POPAnimationState, double) in libPods.a(POPAnimator.o)
applyAnimationProgress(objc_object
, POPAnimationState, double) in libPods.a(POPAnimator.o)
"vtable for __cxxabiv1::__si_class_type_info", referenced from:
typeinfo for _POPPropertyAnimationState in libPods.a(POPSpringAnimation.o)
typeinfo for _POPSpringAnimationState in libPods.a(POPSpringAnimation.o)
typeinfo for std::__1::__shared_ptr_pointer<POP::Vector*, std::__1::default_deletePOP::Vector, std::__1::allocatorPOP::Vector > in libPods.a(POPSpringAnimation.o)
typeinfo for std::__1::__shared_ptr_pointer<POPAnimatorItem*, std::__1::default_delete, std::__1::allocator > in libPods.a(POPAnimator.o)
typeinfo for _POPBasicAnimationState in libPods.a(POPBasicAnimation.o)
typeinfo for _POPDecayAnimationState in libPods.a(POPDecayAnimation.o)
NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
"vtable for std::__1::__shared_count", referenced from:
std::_1::shared_ptrPOP::Vector::shared_ptr<POP::Vector, void>(POP::Vector) in libPods.a(POPSpringAnimation.o)
std::_1::shared_ptr::shared_ptr<POPAnimatorItem, void>(POPAnimatorItem) in libPods.a(POPAnimator.o)
NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
"vtable for std::__1::__shared_weak_count", referenced from:
std::_1::shared_ptrPOP::Vector::shared_ptr<POP::Vector, void>(POP::Vector) in libPods.a(POPSpringAnimation.o)
std::_1::shared_ptr::shared_ptr<POPAnimatorItem, void>(POPAnimatorItem) in libPods.a(POPAnimator.o)
NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
"std::__1::__shared_weak_count::__add_shared()", referenced from:
-[POPSpringAnimation velocity] in libPods.a(POPSpringAnimation.o)
-[POPSpringAnimation setVelocity:] in libPods.a(POPSpringAnimation.o)
POPPropertyAnimationState::willRun(bool, objc_object) in libPods.a(POPSpringAnimation.o)
POPSpringAnimationState::advance(double, double, objc_object) in libPods.a(POPSpringAnimation.o)
_POPPropertyAnimationState::computeProgress() in libPods.a(POPSpringAnimation.o)
_POPPropertyAnimationState::readObjectValue(std::1::shared_ptrPOP::Vector, objc_object) in libPods.a(POPSpringAnimation.o)
_POPSpringAnimationState::hasConverged() in libPods.a(POPSpringAnimation.o)
...
"std::__1::__shared_weak_count::__release_shared()", referenced from:
std::__1::shared_ptr<POP::Vector const>::shared_ptr() in libPods.a(POPSpringAnimation.o)
std::__1::shared_ptrPOP::Vector::shared_ptr() in libPods.a(POPSpringAnimation.o)
std::__1::shared_ptr::shared_ptr() in libPods.a(POPAnimator.o)
"std::__1::__vector_base_common::__throw_length_error() const", referenced from:
std::__1::vectorstd::__1::shared_ptr<POPAnimatorItem, std::__1::allocatorstd::__1::shared_ptr >::allocate(unsigned long) in libPods.a(POPAnimator.o)
"vtable for __cxxabiv1::__class_type_info", referenced from:
typeinfo for _POPAnimationState in libPods.a(POPAnimation.o)
typeinfo for std::__1::default_deletePOP::Vector in libPods.a(POPSpringAnimation.o)
typeinfo for std::__1::default_delete in libPods.a(POPAnimator.o)
NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
"typeinfo for std::__1::__shared_weak_count", referenced from:
typeinfo for std::__1::__shared_ptr_pointer<POP::Vector*, std::__1::default_deletePOP::Vector, std::__1::allocatorPOP::Vector > in libPods.a(POPSpringAnimation.o)
typeinfo for std::__1::__shared_ptr_pointer<POPAnimatorItem*, std::__1::default_delete, std::__1::allocator > in libPods.a(POPAnimator.o)
"___cxa_begin_catch", referenced from:
___clang_call_terminate in libPods.a(POPAnimation.o)
"operator new(unsigned long)", referenced from:
-[POPAnimation _initState] in libPods.a(POPAnimation.o)
-[POPSpringAnimation _initState] in libPods.a(POPSpringAnimation.o)
-[POPSpringAnimation init] in libPods.a(POPSpringAnimation.o)
std::_1::shared_ptrPOP::Vector::shared_ptr<POP::Vector, void>(POP::Vector) in libPods.a(POPSpringAnimation.o)
-[POPAnimator addAnimation:forObject:key:] in libPods.a(POPAnimator.o)
std::__1::liststd::__1::shared_ptr<POPAnimatorItem, std::__1::allocatorstd::__1::shared_ptr >::push_back(std::__1::shared_ptr const&) in libPods.a(POPAnimator.o)
std::__1::vectorstd::__1::shared_ptr<POPAnimatorItem, std::__1::allocatorstd::__1::shared_ptr >::allocate(unsigned long) in libPods.a(POPAnimator.o)
...
"std::terminate()", referenced from:
___clang_call_terminate in libPods.a(POPAnimation.o)
"std::__1::__shared_weak_count::
__shared_weak_count()", referenced from:
std::__1::_shared_ptr_pointer<POP::Vector, std::__1::default_deletePOP::Vector, std::__1::allocatorPOP::Vector >::
__shared_ptr_pointer() in libPods.a(POPSpringAnimation.o)
std::__1::__shared_ptr_pointer<POPAnimatorItem*, std::__1::default_delete, std::__1::allocator >::
__shared_ptr_pointer() in libPods.a(POPAnimator.o)
"operator delete(void*)", referenced from:
-[POPAnimation _initState] in libPods.a(POPAnimation.o)
_POPAnimationState::_POPAnimationState() in libPods.a(POPAnimation.o)
-[POPSpringAnimation _initState] in libPods.a(POPSpringAnimation.o)
-[POPSpringAnimation init] in libPods.a(POPSpringAnimation.o)
-[POPSpringAnimation dealloc] in libPods.a(POPSpringAnimation.o)
-[POPSpringAnimation setSolver:] in libPods.a(POPSpringAnimation.o)
_POPSpringAnimationState::
_POPSpringAnimationState() in libPods.a(POPSpringAnimation.o)
...
"___gxx_personality_v0", referenced from:
__ZL13_staticStates_block_invoke in libPods.a(POPAnimatableProperty.o)
__ZL13_staticStates_block_invoke_2 in libPods.a(POPAnimatableProperty.o)
__ZL13_staticStates_block_invoke_3 in libPods.a(POPAnimatableProperty.o)
__ZL13_staticStates_block_invoke_4 in libPods.a(POPAnimatableProperty.o)
__ZL13_staticStates_block_invoke_5 in libPods.a(POPAnimatableProperty.o)
__ZL13_staticStates_block_invoke_6 in libPods.a(POPAnimatableProperty.o)
__ZL13_staticStates_block_invoke_7 in libPods.a(POPAnimatableProperty.o)
...
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

NSCopying

I see that POPAnimations do not conform to NSCopying. I don't know enough about POP to say for certain, but I use relative additive Core Animation to get a similar effect as POP, and copying is a critical technique that might also be useful here.

If layers are already animating along a complicated path due to continuous user interaction, and you want to insert new layers with animated values that exactly match existing ones, copying is one way to accomplish this.

Add visual examples to README?

I think it'd be pretty cool to see visual examples throughout the readme of the various animation types and differences in setting values. Obviously it's in Paper, but it would be an awesome touch to see them here.

Double notification

There is a double notification, i.e. calls to pop_animationDidStart and pop_animationDidStop if cancelling an animation with set beginTime which didn't started yet when removed from the object it was associated with using pop_removeAllAnimations.

The double notification happens due to the handling of animations in [POPAnimator removeAllAnimationsForObject:]. The animation is stopped once when it is found in the for loop on the _list items and second time from the for loop on the animations array. If the animation was already started (active==true), there is no issue as the implementation within stop() turns the object into inactive state and isStarted() also returns true as the animation's startTime was set when stop() is called second time, so nothing happens then. However, when the animation wasn't started yet and is inactive, then in both calls the same code path is executed causing the notifications to fire.

A potential solution might be to not stop the animation from the for loop on the _list items. Just remove them from the list. They will be stopped anyway in the second for loop.

Provide a way to change duration of animations

Hi,

I'm trying to scale a label up 2x and then down back to 1x using Spring animation by chaining two POPSpringAnimation animations. The problem is it's too slow, I tried making it faster by changing the velocity property but it causes an exception when trying to set fromValue/toValue, and I didn't find any other way to change the duration of the animation.

POPSpringAnimation *scaleUp = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerScaleXY];
    scaleUp.velocity = @(2.0); // having this makes the next line throw an exception
    scaleUp.fromValue  = [NSValue valueWithCGSize:CGSizeMake(1.0f, 1.0f)];
    scaleUp.toValue = [NSValue valueWithCGSize:CGSizeMake(2.0f, 2.0f)];
    scaleUp.springBounciness = 20.0f;
    scaleUp.springSpeed = 20.0f;

    [scaleUp setCompletionBlock:^(POPAnimation *animation, BOOL finished) {
        if(finished){
            NSLog(@"finished");
            POPSpringAnimation *scaleDown = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerScaleXY];

            scaleDown.fromValue = [NSValue valueWithCGPoint:CGPointMake(2.0f, 2.0f)];
            scaleDown.toValue = [NSValue valueWithCGPoint:CGPointMake(1.0f, 1.0f)];
            [self.lbl.layer pop_addAnimation:scaleDown forKey:@"second"];
        }
    }];

    [self.lbl.layer pop_addAnimation:scaleUp forKey:@"first"];

clampMode for spring animation

I had the idea of making a button bounce off the wall of the iPhone screen and thought that setting the clampMode for the animation to kPOPAnimationClampEnd would stop the animation from going further than the end, but it turns out it just stops the animation as soon as it reaches the end - without any spring from that point.

Is that expected behaviour? And if so, could you recommend a different approach to this?

Spring with kPOPLayerScaleXY flips the image of UIImageView

Weird thing is it only flips for the very first time when I triggered this animation.
Here is my code when UIImageView is tapped:

- (void)buttonTapped:(id)sender
{
    id object = [sender view];

    POPSpringAnimation *spring = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerScaleXY];
    spring.fromValue = [NSValue valueWithCGSize:CGSizeMake(0.8, 0.8)];
    spring.toValue = [NSValue valueWithCGSize:CGSizeMake(1, 1)];
    spring.springBounciness = 10;
    spring.springSpeed = 20;
    [object pop_addAnimation:spring forKey:@"anything"];
}

Cant get Project to find POP.h

Hello Community & Paper-Team!

thanks for the awesome work and to open source this!!

I was trying now the whole evening to add pop to my Project. I added, like written in the readme, the files in the pop folder to my Project. Also I added the -lc++ flag to "Other Linker Flags".

But when I add #import < POP/POP.h > it says couldn't be found. Any Idea why?

iOS6 support

POP try to access to a undeclared property on a UINavigationBar (barTintColor), in the declaration of the big static POPStaticAnimatablePropertyState _staticStates[]

Improve support for 3rd party animatable properties

Hi

I have a couple of classes and components I very much would like to integrate with Pop. I think it would be awesome to share my latest doings with everyone.

My suggested course of action

  1. Create a new project with a podspec named "+Pop"
  2. Write a class named "POPAnimatableProperty+"
  3. Define all animatable properties in header e.g. "kPOPView"
  4. In some way declare all the POPAnimatableProperty so that it is accessible via +[POPAnimatableProperty propertyWithName:]

I'm not quite sure about how to do listpoint 4.

The general question is: How should 3rd party libraries go about integrating with Pop? Some guidelines along the lines of this http://promisekit.org/#adding-promises-to-third-party-libraries would be great!

Typo in Readme

In this example, we using a spring animation to animates = In this example, we are using a spring animation to animate

Single frame flashes of 'initial' animation before `fromValue` kicks in.

https://github.com/zdavison/POPBug/tree/master

I've isolated a demonstrable version of this code here, with a short (shaky) vine you can view to see the bug. A few things I've noted:

  • The 'add' animation is the only time this occurs. This leads me to believe it may be because we're adding a new layer and immediately animating it. I have also seen this with existing layers though.
  • I've seen this behaviour with both scaling from 0, using transforms, and while animating bounds properties from CGRectZero.
  • It's intermittent, you may need to try playing with it to catch it. It also seems to only happen on my device, rather than the simulator. (Have tried on several iPads, mini, air, etc)

This could also be my own bad usage / misunderstanding, which would be great!

Why doesn't POPDecayAnimation use toValue?

I noticed that POPDecayAnimation ignores the toValue property when set (fromValue works great). Why is this?

If, for example, I'm using POPDecayAnimation to animate an X or Y position, what would be the appropriate way to have my object animate to a specific coordinate?

Looking forward `kPOPViewTransform` to be added.

Am I doing this right? Or there is an alternative way to do it?

POPSpringAnimation *scaleAnimation = [POPSpringAnimation animationWithPropertyNamed:kPOPViewTransform];
scaleAnimation.toValue  = [NSValue valueWithCGAffineTransform:_originTransform];        
[view pop_addAnimation:scaleAnimation forKey:@"scaleAnimation"];

Request for convenience constructors to take in more arguments

Hey guys, I'm not sure if this has already cross your mind (probably has!) but I'd love for Pop's various convenience constructors to take in more arguments ala the variety of animation class methods on UIView. For instance, instead of writing this:

POPSpringAnimation *rotate = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerRotation];
rotate.fromValue = @(0);
rotate.toValue = @(M_PI/4);
rotate.springBounciness = 13.00f;
rotate.springSpeed = 2.0f;
[self.plus.layer pop_addAnimation:rotate forKey:@"rotate"];

I could write:

POPSpringAnimation *rotate = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerRotation
fromValue:@(0) toValue:@(M_PI/4) springBounciness:13.00f springSpeed:2.0f];
[self.plus.layer pop_addAnimation:rotate forKey:@"rotate"];

I imagine there could be a host of these with various combinations of arguments depending on the type and usage of the animation.

What are your thoughts? And if this idea already crossed your minds but was decided against, I'd be really interested to hear your rationale.

Mike

POP animations crash when running in the device.

Thank you for POP, it's awesome.
I've installed it using CocoaPods and start playing around with it.
Everything works great until I test it in my device (iPhone), got this as if POP library weren't included in the build.

2014-05-05 12:40:11.358 yeti[1806:60b] +[POPSpringAnimation convertBounciness:speed:toTension:friction:mass:]: unrecognized selector sent to class 0x3c0854
2014-05-05 12:40:11.361 yeti[1806:60b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[POPSpringAnimation convertBounciness:speed:toTension:friction:mass:]: unrecognized selector sent to class 0x3c0854'

I got '-lc++' in Other Linker Flags.
Building Active Architecture only --> Debug:YES - Release: NO;

Any ideas?
Thanks!

Animating view or layer background color?

Trying to animate color is causing crashes for me. I tried both kPOPViewBackgroundColor and kPOPLayerBackgroundColor.

Animating with the kPOPViewBackgroundColor property crashes the app due to uncaught exception 'Unsuported value', reason: 'Animating UICachedDeviceRGBColor values is not supported'.

Animating with the kPOPLayerBackgroundColor property crashes the app due to uncaught exception 'NSInternalInconsistencyException', reason: 'unhandled type 9'.

I'm doing really simple animations like

POPBasicAnimation *colorAnim = [POPBasicAnimation animationWithPropertyNamed:kPOPViewBackgroundColor];
    colorAnim.toValue = [UIColor redColor];
    [someView pop_addAnimation:colorAnim forKey:@"colorAnim"];

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.