2011-03-18 36 views
3

我不想将缩放比例用作经典缩放比例,而是想将比例形式更改为矩形比如。 经过很多尝试,我到目前为止,我的手指是矩形的角落。 所以,但如果我在我的视图内开始一个新的捏手势让我的手指更小,而不是像正常的规模变大。UIPinchGestureRecognizer在不同的x和y方向上缩放视图

if ([gestureRecognizer numberOfTouches] >1) { 
    //getting width and height between gestureCenter and one of my finger 
    float x = [gestureRecognizer locationInView:self].x - [gestureRecognizer locationOfTouch:0 inView:self].x; 
    if (x<0) { 
     x *= -1; 
    } 
    float y = [gestureRecognizer locationInView:self].y - [gestureRecognizer locationOfTouch:0 inView:self].y; 
    if (y<0) { 
     y *= -1; 
    } 
    //double size cause x and y is just the way from the middle to my finger 
    float width = x*2; 
    if (width < 1) { 
     width = 1; 
    } 
    float height = y*2; 
    if (height < 1) { 
     height = 1; 
    } 
    self.bounds = CGRectMake(self.bounds.origin.x , self.bounds.origin.y , width, height); 
    [gestureRecognizer setScale:1]; 
    [[self layer] setBorderWidth:2.f]; 
} 

没有人知道一种方法来制作X-Y-Scale,它不会调整到我的手指位置作为角落。 Example

非常感谢您

+0

[在水平和垂直方向缩放UIPinchGestureRecognizer的单独(可能的重复https://stackoverflow.com/questions/12354959/scale-of-uipinchgesturerecognizer-in-horizo​​ntal-和垂直方向分开) – Fattie 2017-07-12 00:52:56

+0

为什么这个问题是重复的,如果它比较老,甚至有可接受的答案? – Seega 2017-07-12 15:03:58

回答

11

得到了解决

- (void) scaleSelfWith:(UIPinchGestureRecognizer *)gestureRecognizer{ 
if ([gestureRecognizer numberOfTouches] >1) { 

    //getting width and height between gestureCenter and one of my finger 
    float x = [gestureRecognizer locationInView:self].x - [gestureRecognizer locationOfTouch:1 inView:self].x; 
    if (x<0) { 
     x *= -1; 
    } 
    float y = [gestureRecognizer locationInView:self].y - [gestureRecognizer locationOfTouch:1 inView:self].y; 
    if (y<0) { 
     y *= -1; 
    } 

    //set Border 
    if (gestureRecognizer.state == UIGestureRecognizerStateBegan) { 
     xDis = self.bounds.size.width - x*2; 
     yDis = self.bounds.size.height - y*2; 
    } 

    //double size cause x and y is just the way from the middle to my finger 
    float width = x*2+xDis; 
    if (width < 1) { 
     width = 1; 
    } 
    float height = y*2+yDis; 
    if (height < 1) { 
     height = 1; 
    } 
    self.bounds = CGRectMake(self.bounds.origin.x , self.bounds.origin.y , width, height); 
    [gestureRecognizer setScale:1]; 
    [[self layer] setBorderWidth:2.f]; 
} 
} 

添加xDif和yDif与我联系的从视图侧面的距离。
规模后,我将它们添加到大小

+0

太棒了!我发现的其他解决方案使用CGAffineTransformScale,以缩放整个视图及其子视图。 – nahung89 2014-09-18 00:32:47

+0

在此期间可能会有更简单的解决方案。代码非常陈旧,客观的做了一个大的演变。 – Seega 2014-09-25 09:26:08

相关问题