Created
December 28, 2011 01:34
-
-
Save mtsd/1525728 to your computer and use it in GitHub Desktop.
iPhone拡大縮小アニメーション
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /* | |
| ScalableViewController.h | |
| */ | |
| @interface ScalableViewController : UIViewController | |
| @property (nonatomic, retain) UIView *scaledView; | |
| @end | |
| /* | |
| ScalableViewController.h | |
| */ | |
| #define TIME_FOR_SHRINKING 0.31f // Has to be different from SPEED_OF_EXPANDING and has to end in 'f' | |
| #define TIME_FOR_EXPANDING 0.30f // Has to be different from SPEED_OF_SHRINKING and has to end in 'f' | |
| #define SCALED_DOWN_AMOUNT 0.01 // For example, 0.01 is one hundredth of the normal size | |
| @implementation ScalableViewController | |
| @synthesize scaledView = _scaledView; | |
| - (void)removeScaledView | |
| { | |
| if (_scaledView) { | |
| [_scaledView removeFromSuperview]; | |
| [_scaledView release], _scaledView = nil; | |
| } | |
| } | |
| - (void)shrinkThumbView | |
| { | |
| self.view.userInteractionEnabled = NO; | |
| UIView *thumbView = ...; | |
| CGPoint offset = ...; | |
| UIImageView *scaledView = (UIImageView *)self.scaledView; | |
| CGRect sf = CGRectMake(offset.x, offset.y, thumbView.frame.size.width, thumbView.frame.size.height); | |
| [UIView animateWithDuration:TIME_FOR_SHRINKING | |
| delay:0.0 | |
| options:UIViewAnimationCurveEaseIn | |
| animations:^{ | |
| scaledView.frame = sf; | |
| } | |
| completion:^(BOOL finished) { | |
| [self removeScaledView]; | |
| self.view.userInteractionEnabled = YES; | |
| }]; | |
| } | |
| - (void)expandThumbView | |
| { | |
| self.view.userInteractionEnabled = NO; | |
| UIView *thumbView = ...; | |
| CGPoint offset = ...; | |
| CGRect f = self.contentView.frame; | |
| UIImageView *scaledView = [[[UIImageView alloc] initWithFrame:CGRectMake(offset.x, offset.y, thumbView.frame.size.width, thumbView.frame.size.height)] autorelease]; | |
| UITapGestureRecognizer *gesture = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapGestureOnScaledView:)] autorelease]; | |
| scaledView.userInteractionEnabled = YES; | |
| scaledView.exclusiveTouch = YES; | |
| [scaledView addGestureRecognizer:gesture]; | |
| [self.view addSubview:scaledView]; | |
| self.scaledView = scaledView; | |
| CGRect sf = CGRectMake(0, 0, f.size.width, f.size.height); | |
| [UIView animateWithDuration:TIME_FOR_EXPANDING | |
| delay:0.0 | |
| options:UIViewAnimationCurveEaseOut | |
| animations:^{ | |
| scaledView.frame = sf; | |
| } | |
| completion:^(BOOL finished) { | |
| self.view.userInteractionEnabled = YES; | |
| }]; | |
| } | |
| - (void)handleTapGestureOnScaledView:(UITapGestureRecognizer *)gestureRecognizer | |
| { | |
| [self shrinkThumbView]; | |
| } | |
| - (void)thumbsViewCell:(UITableViewCell *)cell didSelectThumb:(id)thumb | |
| { | |
| if (_scaledView) { | |
| [self shrinkThumbView]; | |
| } else { | |
| [self expandThumbView]; | |
| } | |
| } | |
| @end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment