Skip to content

Commit

Permalink
added simpler APIs for FlipImageView, added default duration, added a…
Browse files Browse the repository at this point in the history
…nimation direction enum
  • Loading branch information
calimarkus committed Nov 19, 2013
1 parent d0eedaf commit 5bebe50
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 12 deletions.
Expand Up @@ -208,9 +208,7 @@ - (void)viewTapped:(UITapGestureRecognizer*)recognizer
JDFlipImageView *flipImageView = (JDFlipImageView*)self.flipView;

self.imageIndex = (self.imageIndex+1)%3;
[flipImageView setImageAnimated:[UIImage imageNamed:[NSString stringWithFormat: @"example%02d.jpg", self.imageIndex+1]]
duration:0.66
completion:nil];
[flipImageView setImageAnimated:[UIImage imageNamed:[NSString stringWithFormat: @"example%02d.jpg", self.imageIndex+1]]];
}
else
{
Expand Down
14 changes: 13 additions & 1 deletion JDFlipNumberView/JDFlipImageView.h
Expand Up @@ -8,16 +8,28 @@

#import <UIKit/UIKit.h>

extern const NSTimeInterval JDFlipImageViewDefaultFlipDuration;

typedef void(^JDFlipImageViewCompletionBlock)(BOOL finished);

typedef NS_ENUM(NSInteger, JDFlipImageViewFlipDirection) {
JDFlipImageViewFlipDirectionDown,
JDFlipImageViewFlipDirectionUp
};

@interface JDFlipImageView : UIView

@property (nonatomic, strong) UIImage *image;
@property (nonatomic, assign) BOOL animateBottomUp;
@property (nonatomic, assign) JDFlipImageViewFlipDirection flipDirection;
@property (nonatomic, assign) NSUInteger zDistance;

- (id)initWithImage:(UIImage*)image;

- (void)setImageAnimated:(UIImage*)image;

- (void)setImageAnimated:(UIImage*)image
completion:(JDFlipImageViewCompletionBlock)completion;

- (void)setImageAnimated:(UIImage*)image
duration:(CGFloat)duration
completion:(JDFlipImageViewCompletionBlock)completion;
Expand Down
33 changes: 25 additions & 8 deletions JDFlipNumberView/JDFlipImageView.m
Expand Up @@ -11,6 +11,7 @@

#import "JDFlipImageView.h"

const NSTimeInterval JDFlipImageViewDefaultFlipDuration = 0.66;
static NSString *const JDFlipImageAnimationKey = @"JDFlipImageAnimationKey";

typedef NS_OPTIONS(NSUInteger, JDFlipAnimationState) {
Expand Down Expand Up @@ -170,6 +171,21 @@ - (void)setImage:(UIImage *)image;
self.bottomImageView.image = self.nextImages[1];
}

- (void)setImageAnimated:(UIImage*)image;
{
[self setImageAnimated:image
duration:JDFlipImageViewFlipDirectionDown
completion:nil];
}

- (void)setImageAnimated:(UIImage*)image
completion:(JDFlipImageViewCompletionBlock)completion;
{
[self setImageAnimated:image
duration:JDFlipImageViewFlipDirectionDown
completion:completion];
}

- (void)setImageAnimated:(UIImage*)image
duration:(CGFloat)duration
completion:(JDFlipImageViewCompletionBlock)completion;
Expand Down Expand Up @@ -202,7 +218,7 @@ - (void)runAnimation;
{
[self updateFlipViewFrame];

BOOL isTopDown = !self.animateBottomUp;
BOOL isTopDown = (self.flipDirection == JDFlipImageViewFlipDirectionDown);

// setup animation
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform"];
Expand All @@ -226,11 +242,7 @@ - (void)runAnimation;
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
} else {
// setup second animation half
if (isTopDown) {
self.flipImageView.image = self.nextImages[1];
} else {
self.flipImageView.image = self.nextImages[0];
}
self.flipImageView.image = isTopDown ? self.nextImages[1] : self.nextImages[0];

animation.fromValue = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(isTopDown ? M_PI_2 : -M_PI_2, 1, 0, 0)];
animation.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(0.0, 1, 0, 0)];
Expand Down Expand Up @@ -264,7 +276,12 @@ - (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)finished
self.animationState = JDFlipAnimationStateFirstHalf;

// update images
self.bottomImageView.image = self.flipImageView.image;
BOOL isTopDown = (self.flipDirection == JDFlipImageViewFlipDirectionDown);
if (isTopDown) {
self.bottomImageView.image = self.flipImageView.image;
} else {
self.topImageView.image = self.flipImageView.image;
}

// remove old animation
[self.flipImageView.layer removeAnimationForKey:JDFlipImageAnimationKey];
Expand All @@ -283,7 +300,7 @@ - (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)finished

- (void)updateFlipViewFrame;
{
BOOL isTopDown = !self.animateBottomUp;
BOOL isTopDown = (self.flipDirection == JDFlipImageViewFlipDirectionDown);
if ((isTopDown && self.animationState == JDFlipAnimationStateFirstHalf) ||
(!isTopDown && self.animationState == JDFlipAnimationStateSecondHalf)) {
self.flipImageView.layer.anchorPoint = CGPointMake(0.5, 1.0);
Expand Down

0 comments on commit 5bebe50

Please sign in to comment.