Guest User

Untitled

a guest
Jan 23rd, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.06 KB | None | 0 0
  1. // ImageScrubberViewController.m
  2.  
  3. #import "ImageScrubberViewController.h"
  4.  
  5. #define EASE_SPEED 0.95
  6. #define MAX_VELOCITY 6.0
  7. #define DRAG_SCALE_FACTOR 200.0
  8. #define VEL_SCALE_FACTOR 150.0
  9. #define DEFAULT_PRODUCT_KEY @"Ironman_camera_move_v5"
  10. #define IMAGE_ASSET_PATH @"Assets/Images/Product_Overview/"
  11.  
  12. @implementation ImageScrubberViewController
  13. @synthesize productImage;
  14.  
  15. - (id)initWithProductKey:(NSString *)productKeyStr
  16. {
  17. NSLog( @"ImageScrubberViewController::initWithProductKey" );
  18.  
  19. self = [super initWithNibName:@"ImageScrubberViewController" bundle:nil];
  20.  
  21. if (self)
  22. {
  23. productKey = [productKeyStr retain];
  24. numImages = 100;
  25. currentImage = 0;
  26. xVel = 0;
  27. }
  28.  
  29. return self;
  30. }
  31.  
  32. - (id)init
  33. {
  34. return [self initWithProductKey:DEFAULT_PRODUCT_KEY];
  35. }
  36.  
  37. - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
  38. {
  39. return [self initWithProductKey:DEFAULT_PRODUCT_KEY];
  40. }
  41.  
  42. - (IBAction)handlePanGesture:(UIPanGestureRecognizer *)sender
  43. {
  44. if ( sender.state == UIGestureRecognizerStateBegan )
  45. {
  46. touchDown = YES;
  47. }
  48. else if ( sender.state == UIGestureRecognizerStateChanged )
  49. {
  50. CGPoint vel = [sender velocityInView:sender.view.superview];
  51.  
  52. // reduce the dragging impact
  53. float scaledVel = -vel.x/DRAG_SCALE_FACTOR;
  54. currentImage += (int)roundf(scaledVel);
  55. }
  56. else if (sender.state == UIGestureRecognizerStateEnded )
  57. {
  58. CGPoint vel = [sender velocityInView:sender.view.superview];
  59.  
  60. xVel = -vel.x/VEL_SCALE_FACTOR;
  61. xVel = fmax( -MAX_VELOCITY, fminf( MAX_VELOCITY, xVel ) );
  62.  
  63. touchDown = NO;
  64. }
  65. }
  66.  
  67. - (void)updateFrame:(id)data
  68. {
  69. if ( touchDown == NO )
  70. {
  71. if ( xVel < 0 )
  72. xVel+=0.1;
  73. else if ( xVel > 0 )
  74. xVel-=0.1;
  75.  
  76. currentImage += (int)roundf(xVel);
  77. }
  78.  
  79. // wrap image sequence
  80. if ( currentImage < 0 )
  81. {
  82. currentImage = [rotationImages count]-1 + currentImage;
  83. }
  84.  
  85. if ( currentImage > [rotationImages count]-1 )
  86. {
  87. currentImage = currentImage - [rotationImages count]-1;
  88. }
  89.  
  90. if ( currentImage < 0 ) currentImage = [rotationImages count]-1;
  91. if ( currentImage > [rotationImages count]-1 ) currentImage = 0;
  92.  
  93. [productImage setImage:(UIImage *)[rotationImages objectAtIndex:currentImage]];
  94. }
  95.  
  96. - (void)viewDidLoad
  97. {
  98. NSLog( @"ImageScrubberViewConroller::viewDidLoad" );
  99.  
  100. // load all images
  101. rotationImages = [[NSMutableArray alloc] init];
  102.  
  103. for ( int i=0; i<numImages; i++ )
  104. {
  105. [rotationImages addObject:[UIImage imageNamed:[NSString stringWithFormat:@"%@%@_000%i.png", IMAGE_ASSET_PATH, productKey, i]]];
  106. }
  107.  
  108. // pan gesture
  109. UITapGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc]
  110. initWithTarget:self action:@selector(handlePanGesture:)];
  111.  
  112. [self.view addGestureRecognizer:panGesture];
  113. [panGesture release];
  114.  
  115. [productImage setImage:(UIImage *)[rotationImages objectAtIndex:0]];
  116.  
  117. // sync to frame redraws
  118. CADisplayLink *frameLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(updateFrame:)];
  119.  
  120. frameLink.frameInterval = 1;
  121. [frameLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
  122.  
  123. touchDown = NO;
  124. }
  125.  
  126. - (void)viewDidUnload
  127. {
  128. NSLog( @"ImageScrubberViewConroller::viewDidUnload" );
  129.  
  130. CADisplayLink *frameLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(updateFrame:)];
  131. [frameLink removeFromRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
  132.  
  133. [rotationImages release];
  134. rotationImages = nil;
  135.  
  136. [productImage release];
  137. productImage = nil;
  138.  
  139. [productKey release];
  140. productKey = nil;
  141.  
  142. [productImage release];
  143. productImage = nil;
  144.  
  145. [super viewDidUnload];
  146. }
  147.  
  148. - (void)dealloc
  149. {
  150. NSLog( @"ImageScrubberViewConroller::dealloc" );
  151.  
  152. [rotationImages release];
  153. [productImage release];
  154. [productKey release];
  155.  
  156. [super dealloc];
  157. }
  158.  
  159. @end
Add Comment
Please, Sign In to add comment