【问题标题】:UIPinchGestureRecognizer Scale view in different x and y directionsUIPinchGestureRecognizer 在不同的 x 和 y 方向缩放视图
【发布时间】:2023-03-19 22:20:01
【问题描述】:

我不想将比例用作经典缩放,而是想将四边形的形式更改为矩形。 经过大量尝试后,我的手指已经达到了矩形的角。 所以,但如果我在视图中开始一个新的捏合手势,我的手指会变小,而不是像正常比例那样变大。

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 的方法,它不会将我的手指位置调整为角落。

非常感谢

【问题讨论】:

标签: iphone objective-c scale pinch


【解决方案1】:

解决办法

- (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 以及我触摸到视图侧面的距离。
缩放后我将它们添加到大小

【讨论】:

  • 太棒了!我发现的其他解决方案使用 CGAffineTransformScale,因此它可以缩放整个视图及其子视图。
  • 可能同时有更简单的解决方案。代码已经很老了,objective-c 有了很大的发展。
猜你喜欢
  • 2014-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多