2014-04-18 70 views
1

我試圖在iPad視圖上同時創建典型的捏縮放和平移。該視圖本身包含4個其他子視圖。 我遇到的問題是,雖然我可以同時捏住縮放和平移,但平移會超出範圍,以至於您可以將視圖移出框架。限制使用UIPinchGestureRecognizer捏UIPanGestureRecognizer,對於iPad

我試過幾個鍋侷限性,但他們似乎都只有兩種Y軸,或X和Y,但只有在不放大的情況下限制。

有什麼建議?

下面是我用什麼都捏縮放和泛手勢:

// for Pan Gesture 
- (void) handlePanGestures:(UIPanGestureRecognizer *)recognizer 
{ 
if (recognizer.state != UIGestureRecognizerStateEnded && recognizer.state != UIGestureRecognizerStateFailed) 
{ 
    CGPoint translation = [recognizer translationInView:self.view]; 
    CGPoint finalPoint = CGPointMake(recognizer.view.center.x + translation.x, recognizer.view.center.y + translation.y); 

    CGPoint location = [recognizer locationInView:recognizer.view.superview]; 
    recognizer.view.center = location; 

    // set final position 
    recognizer.view.center = finalPoint; 
    [recognizer setTranslation:CGPointZero inView:self.view]; 
} 
} 

// for Pinch Gesture 
- (void)handlePinches:(UIPinchGestureRecognizer *)gestureRecognizer 
{ 

if([gestureRecognizer state] == UIGestureRecognizerStateBegan) 
{ 
    // Reset the last scale, necessary if there are multiple objects with different scales 
    self.currentScale = [gestureRecognizer scale]; 
} 

if ([gestureRecognizer state] == UIGestureRecognizerStateBegan || 
    [gestureRecognizer state] == UIGestureRecognizerStateChanged) 
{ 

    CGFloat currentScale = [[[gestureRecognizer view].layer valueForKeyPath:@"transform.scale"] floatValue]; 

    // Constants to adjust the max/min values of zoom 
    const CGFloat kMaxScale = 2.0; 
    const CGFloat kMinScale = 1.0; 

    CGFloat newScale = 1 - (self.currentScale - [gestureRecognizer scale]); 
    newScale = MIN(newScale, kMaxScale/currentScale); 
    newScale = MAX(newScale, kMinScale/currentScale); 
    CGAffineTransform transform = CGAffineTransformScale([[gestureRecognizer view] transform], newScale, newScale); 
    [gestureRecognizer view].transform = transform; 

    self.currentScale = [gestureRecognizer scale]; // Store the previous scale factor for the next pinch gesture call 
} 
} 
+0

您是否獲得這方面的任何解決方案? – Abha

回答

0

試試這個,對我的作品!

-(void)moveViewWithGestureRecognizer:(UIPanGestureRecognizer *)recognizer{ 

CGRect xRectRef = self.imageView.superview.frame; 
CGPoint translation = [recognizer translationInView:self.imageView]; 

CGPoint xyNew = CGPointMake(self.imageView.frame.origin.x + translation.x, self.imageView.frame.origin.y + translation.y); 

if (recognizer.state == UIGestureRecognizerStateChanged) { 

    if ((xyNew.y <= xRectRef.origin.y) && 
     (xyNew.y + self.imageView.frame.size.height >= xRectRef.origin.y + xRectRef.size.height) && 
     (xyNew.x <= xRectRef.origin.x) && 
     (xyNew.x + self.imageView.frame.size.width >= xRectRef.size.width+xRectRef.origin.x)){ 
     self.imageView.center = CGPointMake(self.imageView.center.x + translation.x, 
              self.imageView.center.y + translation.y); 
     [recognizer setTranslation:CGPointMake(0, 0) inView:self.imageView]; 
    } 
} 

}

相關問題