Friday 24 August 2012

Rotate,Scale(ZoomIn,Zoomout) Multiple Image with GestureRecognizer...Very Easy..

       
        If we want to add Images Dynamically or custom more then time on the view ny the user and after that if we want to modify that image or recognize by Rotation or zoomin,zoomout then bellow code is very important and easy to use...

here, first you define the delegate and 2 variable in yourViewController.h file like bellow


@interface ViewController : UIViewController<UIGestureRecognizerDelegate>{

          CGFloat lastScale;
          CGFloat lastRotation;
}

after that in yourViewController.m file


-(void)yourMethodForAddImage{
        UIImageView *img = [[UIImageView alloc]init];
        [arrTag addObject:img];
        [arrTag retain];
        img.tag = [arrTag count];
        img.image = [UIImage imageNamed:[yourArray objectAtIndex:index]];//here use your array of object or array of imagename
        img.userInteractionEnabled = YES;
        img.frame = CGRectMake(yourViewController.view.center.x,yourViewController.view.center.y, 200, 200);
        
        UIPinchGestureRecognizer *pinchRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(scale:)];
        [pinchRecognizer setDelegate:self];
        [img addGestureRecognizer:pinchRecognizer];
        [pinchRecognizer release];
       
        UIRotationGestureRecognizer *rotationRecognizer = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotate:)];
        [rotationRecognizer setDelegate:self];
        [img addGestureRecognizer:rotationRecognizer];
        [rotationRecognizer release];

        UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapped:)];
        [tapRecognizer setNumberOfTapsRequired:1];
        [tapRecognizer setDelegate:self];
        [img addGestureRecognizer:tapRecognizer];
        [tapRecognizer release];
        
       
        [yourViewController.view addSubview:img];
        [yourViewController.view bringSubviewToFront:img];
        [img release];
}

After that define bellow Methods..


#pragma mark GestureRecognizer Methods

-(void)scale:(id)sender {
     UIView *imgTempGest = [sender view];
    
     if([(UIPinchGestureRecognizer*)sender state] == UIGestureRecognizerStateEnded) {
             lastScale = 1.0;
      return;
     }
     CGFloat scale = 1.0 - (lastScale - [(UIPinchGestureRecognizer*)sender scale]);
     CGAffineTransform currentTransform = [(UIPinchGestureRecognizer*)sender view].transform;
     CGAffineTransform newTransform = CGAffineTransformScale(currentTransform, scale, scale);
     [[(UIPinchGestureRecognizer*)sender view] setTransform:newTransform];
    [imgTempGest setTransform:newTransform];
    
     lastScale = [(UIPinchGestureRecognizer*)sender scale];
}

-(void)rotate:(id)sender {
    
    UIView *imgTempGest = [sender view];
    
     if([(UIRotationGestureRecognizer*)sender state] == UIGestureRecognizerStateEnded) {
             lastRotation = 0.0;
             return;
      }
      CGFloat rotation = 0.0 - (lastRotation - [(UIRotationGestureRecognizer*)sender rotation]);
      CGAffineTransform currentTransform = [(UIPinchGestureRecognizer*)sender view].transform;
      CGAffineTransform newTransform = CGAffineTransformRotate(currentTransform,rotation);
      [[(UIRotationGestureRecognizer*)sender view] setTransform:newTransform];
      [imgTempGest setTransform:newTransform];
      lastRotation = [(UIRotationGestureRecognizer*)sender rotation];
}

-(void)tapped:(id)sender {
      UIView *imgTempGest = [sender view];
      [[[(UITapGestureRecognizer*)sender view] layer] removeAllAnimations];
      [[imgTempGest layer] removeAllAnimations];
}


No comments:

Post a Comment