Files
Jot/Carthage/Checkouts/PromiseKit/Extensions/UIKit/Sources/UIView+AnyPromise.m
James Griffin be7b6b5881 Add PromiseKit dependency
- Added PromiseKit dependency
2018-11-15 22:12:39 -04:00

65 lines
2.2 KiB
Objective-C

//
// UIView+PromiseKit_UIAnimation.m
// YahooDenaStudy
//
// Created by Masafumi Yoshida on 2014/07/11.
// Copyright (c) 2014年 DeNA. All rights reserved.
//
#import <PromiseKit/PromiseKit.h>
#import "UIView+AnyPromise.h"
#define CopyPasta \
NSAssert([NSThread isMainThread], @"UIKit animation must be performed on the main thread"); \
\
if (![NSThread isMainThread]) { \
id error = [NSError errorWithDomain:PMKErrorDomain code:PMKInvalidUsageError userInfo:@{NSLocalizedDescriptionKey: @"Animation was attempted on a background thread"}]; \
return [AnyPromise promiseWithValue:error]; \
} \
\
PMKResolver resolve = nil; \
AnyPromise *promise = [[AnyPromise alloc] initWithResolver:&resolve];
@implementation UIView (PromiseKit)
+ (AnyPromise *)promiseWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations {
return [self promiseWithDuration:duration delay:0 options:0 animations:animations];
}
+ (AnyPromise *)promiseWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnimationOptions)options animations:(void(^)(void))animations
{
CopyPasta;
[UIView animateWithDuration:duration delay:delay options:options animations:animations completion:^(BOOL finished) {
resolve(@(finished));
}];
return promise;
}
+ (AnyPromise *)promiseWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay usingSpringWithDamping:(CGFloat)dampingRatio initialSpringVelocity:(CGFloat)velocity options:(UIViewAnimationOptions)options animations:(void(^)(void))animations
{
CopyPasta;
[UIView animateWithDuration:duration delay:delay usingSpringWithDamping:dampingRatio initialSpringVelocity:velocity options:options animations:animations completion:^(BOOL finished) {
resolve(@(finished));
}];
return promise;
}
+ (AnyPromise *)promiseWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewKeyframeAnimationOptions)options keyframeAnimations:(void(^)(void))animations
{
CopyPasta;
[UIView animateKeyframesWithDuration:duration delay:delay options:options animations:animations completion:^(BOOL finished) {
resolve(@(finished));
}];
return promise;
}
@end