Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ImageScrubberViewController.m
- #import "ImageScrubberViewController.h"
- #define EASE_SPEED 0.95
- #define MAX_VELOCITY 6.0
- #define DRAG_SCALE_FACTOR 200.0
- #define VEL_SCALE_FACTOR 150.0
- #define DEFAULT_PRODUCT_KEY @"Ironman_camera_move_v5"
- #define IMAGE_ASSET_PATH @"Assets/Images/Product_Overview/"
- @implementation ImageScrubberViewController
- @synthesize productImage;
- - (id)initWithProductKey:(NSString *)productKeyStr
- {
- NSLog( @"ImageScrubberViewController::initWithProductKey" );
- self = [super initWithNibName:@"ImageScrubberViewController" bundle:nil];
- if (self)
- {
- productKey = [productKeyStr retain];
- numImages = 100;
- currentImage = 0;
- xVel = 0;
- }
- return self;
- }
- - (id)init
- {
- return [self initWithProductKey:DEFAULT_PRODUCT_KEY];
- }
- - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
- {
- return [self initWithProductKey:DEFAULT_PRODUCT_KEY];
- }
- - (IBAction)handlePanGesture:(UIPanGestureRecognizer *)sender
- {
- if ( sender.state == UIGestureRecognizerStateBegan )
- {
- touchDown = YES;
- }
- else if ( sender.state == UIGestureRecognizerStateChanged )
- {
- CGPoint vel = [sender velocityInView:sender.view.superview];
- // reduce the dragging impact
- float scaledVel = -vel.x/DRAG_SCALE_FACTOR;
- currentImage += (int)roundf(scaledVel);
- }
- else if (sender.state == UIGestureRecognizerStateEnded )
- {
- CGPoint vel = [sender velocityInView:sender.view.superview];
- xVel = -vel.x/VEL_SCALE_FACTOR;
- xVel = fmax( -MAX_VELOCITY, fminf( MAX_VELOCITY, xVel ) );
- touchDown = NO;
- }
- }
- - (void)updateFrame:(id)data
- {
- if ( touchDown == NO )
- {
- if ( xVel < 0 )
- xVel+=0.1;
- else if ( xVel > 0 )
- xVel-=0.1;
- currentImage += (int)roundf(xVel);
- }
- // wrap image sequence
- if ( currentImage < 0 )
- {
- currentImage = [rotationImages count]-1 + currentImage;
- }
- if ( currentImage > [rotationImages count]-1 )
- {
- currentImage = currentImage - [rotationImages count]-1;
- }
- if ( currentImage < 0 ) currentImage = [rotationImages count]-1;
- if ( currentImage > [rotationImages count]-1 ) currentImage = 0;
- [productImage setImage:(UIImage *)[rotationImages objectAtIndex:currentImage]];
- }
- - (void)viewDidLoad
- {
- NSLog( @"ImageScrubberViewConroller::viewDidLoad" );
- // load all images
- rotationImages = [[NSMutableArray alloc] init];
- for ( int i=0; i<numImages; i++ )
- {
- [rotationImages addObject:[UIImage imageNamed:[NSString stringWithFormat:@"%@%@_000%i.png", IMAGE_ASSET_PATH, productKey, i]]];
- }
- // pan gesture
- UITapGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc]
- initWithTarget:self action:@selector(handlePanGesture:)];
- [self.view addGestureRecognizer:panGesture];
- [panGesture release];
- [productImage setImage:(UIImage *)[rotationImages objectAtIndex:0]];
- // sync to frame redraws
- CADisplayLink *frameLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(updateFrame:)];
- frameLink.frameInterval = 1;
- [frameLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
- touchDown = NO;
- }
- - (void)viewDidUnload
- {
- NSLog( @"ImageScrubberViewConroller::viewDidUnload" );
- CADisplayLink *frameLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(updateFrame:)];
- [frameLink removeFromRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
- [rotationImages release];
- rotationImages = nil;
- [productImage release];
- productImage = nil;
- [productKey release];
- productKey = nil;
- [productImage release];
- productImage = nil;
- [super viewDidUnload];
- }
- - (void)dealloc
- {
- NSLog( @"ImageScrubberViewConroller::dealloc" );
- [rotationImages release];
- [productImage release];
- [productKey release];
- [super dealloc];
- }
- @end
Add Comment
Please, Sign In to add comment