123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- //
- // CALayer+PKDownloadButtonAnimations.m
- // Download
- //
- // Created by Pavel on 31/05/15.
- // Copyright (c) 2015 Katunin. All rights reserved.
- //
- #import "CALayer+PKDownloadButtonAnimations.h"
- static NSString *kRorationEndKey = @"PKLayerRorationEndKey";
- @implementation CALayer (PKDownloadButtonAnimations)
- - (void)addRotationAnimationWithKey:(NSString *)animationKey fullRotationDuration:(NSTimeInterval)fullRotationDuration {
- NSNumber *fromValue = [self.presentationLayer valueForKeyPath:@"transform.rotation"];
- [self removeAnimationForKey:kRorationEndKey];
-
- CABasicAnimation *rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
- rotationAnimation.fromValue = fromValue;
- rotationAnimation.toValue = @([rotationAnimation.fromValue floatValue] + (2. * M_PI));
- rotationAnimation.duration = fullRotationDuration;
- rotationAnimation.repeatCount = HUGE_VALF;
- rotationAnimation.removedOnCompletion = NO;
-
- [self addAnimation:rotationAnimation forKey:animationKey];
- }
- - (void)removeRotationAnimationWithKey:(NSString *)animationKey {
- [self removeRotationAnimationWithKey:animationKey fullRotationDuration:0.0];
- }
- - (void)removeRotationAnimationWithKey:(NSString *)animationKey fullRotationDuration:(NSTimeInterval)fullRotationDuration {
- NSNumber *fromValue = [self.presentationLayer valueForKeyPath:@"transform.rotation"];
- NSNumber *toValue = @((fromValue.doubleValue < 0.0) ? 0.0 : 2.0 * M_PI);
-
- [self removeAnimationForKey:animationKey];
-
- const NSTimeInterval animationDuration = ABS(toValue.doubleValue - fromValue.doubleValue) * (fullRotationDuration / (2.0 * M_PI));
-
- if (fromValue.doubleValue != 0.0 && ![fromValue isEqualToNumber:toValue] && animationDuration > 0.0) {
- [CATransaction begin];
- CABasicAnimation *rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
- rotationAnimation.fromValue = fromValue;
- rotationAnimation.toValue = toValue;
- rotationAnimation.duration = animationDuration;
-
- [CATransaction setCompletionBlock:^{
- [self removeAnimationForKey:kRorationEndKey];
- }];
-
- [self addAnimation:rotationAnimation forKey:kRorationEndKey];
- [CATransaction commit];
- }
- else {
- [self removeAnimationForKey:kRorationEndKey];
- }
- }
- @end
|