2013-12-16 16 views
1

我有一個ImageView的到的ViewController,我要放大或縮放手勢縮小。此外,我想獲得最初的觀點,當用戶雙擊圖像。我跟着本教程Make Gallery捏緊並輕敲姿勢不正常工作

如果我只使用捏手勢都工作正常,我可以放大,分放大achieved.The右邊是結果在下面的圖片。雖然,如果我雙擊ImageView ImageView獲取其初始格式(圖1),但最小縮放的實現不被識別,如果我繼續捏合手勢縮小ImageView繼續縮小和我得到這個結果(圖片2):wrong result

這是我的方法來處理事件:

@interface ImageGalleryViewController(){ 


NSString *productName; 
CGFloat previousScale; 
CGFloat previousRotation; 
CGFloat beginX; 
CGFloat beginY; 

CGFloat scale; 
//CGFloat __previousScale; 
} 

- (void)viewDidLoad{ 
[super viewDidLoad]; 
// Do any additional setup after loading the view. 

    scale=1.0; 

    UIPinchGestureRecognizer *pinchGesture = [[UIPinchGestureRecognizer alloc]  initWithTarget:self action:@selector(scaleImage:)]; 
    [self.view addGestureRecognizer:pinchGesture]; 

    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(resetImage:)]; 
    tapGesture.numberOfTapsRequired=2; 
    [self.view addGestureRecognizer:tapGesture]; 


} 

- (void)resetImage:(UITapGestureRecognizer *)recognizer{ 
    [UIView animateWithDuration:0.3 animations:^() { 

    self.view.transform = CGAffineTransformIdentity; 

    }]; 
    self.bigImage.transform = CGAffineTransformIdentity; 
    [self.bigImage setCenter: CGPointMake(self.view.frame.size.width/2,self.view.frame.size.height/2+32)]; 
    [UIView commitAnimations]; 
} 

- (void)scaleImage:(UIPinchGestureRecognizer *)recognizer{ 

    NSLog(@"Scale: %f", [recognizer scale]); 
    if ([recognizer state] == UIGestureRecognizerStateBegan) { 
     previousScale = scale; 
    } 

    CGFloat currentScale = MAX(MIN([recognizer scale] * scale, 10), 1); 
    CGFloat scaleStep = currentScale/previousScale; 
    [self.view setTransform: CGAffineTransformScale(self.view.transform, scaleStep, scaleStep)]; 

    previousScale = currentScale; 

    if ([recognizer state] == UIGestureRecognizerStateEnded || 
     [recognizer state] == UIGestureRecognizerStateCancelled || 
     [recognizer state] == UIGestureRecognizerStateFailed) { 
    // Gesture can fail (or cancelled?) when the notification and the object is dragged simultaneously 
     scale = currentScale; 
     NSLog(@"Final scale: %f", scale); 
    } 
} 

所以,我怎麼能停止,如果最初的右視圖(第一圖像)縮小已經實現?

回答

1

我不得不可變規模重置爲1.0到resetImage方法。所以,現在它工作正常。