I can get the UIPinchGestureRecognizer handler to work with scaling an object but I don't want to scale I want to change the size. For example I have a UITextView and I've attacked a UIPinchGestureRecognizer gesture to it and if the user pinches I want to change the width of the textview to match the pinch. I don't want to scale it so the uitextview is larger(zooming).
views:
1517answers:
3
                
                A: 
                
                
              I think what you want to do is just multiplying the width of your textView's frame with the gesture recognizer's scale:
CGFloat scale = gestureRecognizer.scale;
CGRect newFrame = textView.frame;
newFrame.size = CGSizeMake(scale*newFrame.size.width, newFrame.size.height);
textView.frame = newFrame;
Or isn't this what you mean?
                  Jongsma
                   2010-04-22 14:02:21
                
              That doesn't seem to work.  The uitextview grows very quickly and is delayed.The scale can be from 0-20+
                  Ryan Detzel
                   2010-04-22 14:13:10
                Odd... I wouldn't have expected that. I have never really used gesture recognizers...
                  Jongsma
                   2010-04-22 15:16:06
                
                
                A: 
                
                
              The default behaviour for a 'Pinch' Gesture is to Zoom in, according to the Documentation. So I think you might have to manually catch the touch events & calculate your own Pinch in the touchesMoved event.
i.e.
#pragma mark -
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    if ([touches count] == 2) {
        NSArray *twoTouches = [touches allObjects];
        UITouch *first = [twoTouches objectAtIndex:0];
        UITouch *second = [twoTouches objectAtIndex:1];
        initialDistance = distanceBetweenPoints(
                                                [first locationInView:self.view], 
                                                [second locationInView:self.view]);
    }
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
  if ([touches count] == 2) {
    NSArray *twoTouches = [touches allObjects];
    UITouch *first = [twoTouches objectAtIndex:0];
    UITouch *second = [twoTouches objectAtIndex:1];
    CGFloat currentDistance = distanceBetweenPoints(
                                                    [first locationInView:self.view],
                                                    [second locationInView:self.view]);
    if (initialDistance == 0)
        initialDistance = currentDistance; 
    else if (currentDistance - initialDistance > kMinimumPinchDelta) {
        label.text = @"Outward Pinch";
        [self performSelector:@selector(eraseLabel) 
                   withObject:nil 
                   afterDelay:1.6f];
    }
    else if (initialDistance - currentDistance > kMinimumPinchDelta) {
        label.text = @"Inward Pinch";
        [self performSelector:@selector(eraseLabel) 
                   withObject:nil 
                   afterDelay:1.6f];
    }
  }
}
 - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    initialDistance = 0;
 }
- (void)eraseLabel {
    label.text = @"";
}
                  ThePaddedCell
                   2010-04-22 14:17:58
                
              NOTE: This code is taken from the http://iphonedevbook.com sample code.
                  ThePaddedCell
                   2010-04-22 14:19:05
                Kind of works but since it's a uitextview the text starts to get selected and it stops the interaction. It's not editable but selection still works.
                  Ryan Detzel
                   2010-04-22 15:00:04
                
                
                A: 
                
                
              
            I am doing the very same thing. I will update this post if I found how to do it.
Try this, it work for me (for UIView):
- (IBAction)handlePinchGesture:(UIGestureRecognizer *)sender {
    static CGRect initialBounds;
    UIView *_view = sender.view;
    if (sender.state == UIGestureRecognizerStateBegan)
    {
        initialBounds = _view.bounds;
    }
    CGFloat factor = [(UIPinchGestureRecognizer *)sender scale];
    CGAffineTransform zt = CGAffineTransformScale(CGAffineTransformIdentity, factor, factor);
    _view.bounds = CGRectApplyAffineTransform(initialBounds, zt);
    return;
}
                  olipion
                   2010-05-18 21:55:02