【问题标题】:Resize UIImageView with finger IOS用手指IOS调整UIImageView的大小
【发布时间】:2014-05-16 15:41:47
【问题描述】:

我有一个 UIImageView(和一个 UITextView),我正在使用加号和减号按钮更改它们的高度。但是,我想像在大多数程序中那样做,在我的视图周围出现一个框,用户可以拖动它的一角来调整大小。只需要拖动一个角。相反是固定的。你是怎么做到的?

【问题讨论】:

    标签: ios


    【解决方案1】:

    另一种方式 - 是通过 GestureRecognizer。在某些任务中,我像这样调整图像大小:

    - (void)resizeImage:(UIPinchGestureRecognizer *)recognizer
    {
        if ([recognizer state] == UIGestureRecognizerStateBegan)
        previousScale = [recognizer scale];
    
        UIView *viewToResize = recognizer.view;
        if ([recognizer state] == UIGestureRecognizerStateChanged)
        {
            CGFloat currentScale = [[viewToResize.layer valueForKeyPath:@"transform.scale"] floatValue];
            CGFloat newScale = 1 -  (previousScale - [recognizer scale]);
            newScale = MIN(newScale, MAX_SCALE / currentScale);
            newScale = MAX(newScale, MIN_SCALE / currentScale);
            CGAffineTransform transform = CGAffineTransformScale([viewToResize transform], newScale, newScale);
            viewToResize.transform = transform;
            previousScale = [recognizer scale];
        }
    }
    

    【讨论】:

    • 我读到这是现在完成任务的更好方法。与使用 touchesBegan 和 touchesEnded 相比,您可以使用更少的代码调整视图大小
    • 是的,这是更简单的方法 :) 如果您对此代码有任何疑问 - 请随时提问。
    【解决方案2】:

    我以前从未这样做过,但我认为您必须覆盖视图的 touchesBegan 和 touchesMoved 函数。当您启动 touchesBegan 方法时,请确保您正在触摸正确的视图,(Imageview 或 UItextView)在其声明中设置一个布尔值。 imTouchingOneOrTheOther。因此,当您现在点击 touchesMoved 功能时,您可以相应地调整框架的大小。我会尝试首先使用基于 UIView 块的动画来调整框架,如果看起来不合适,那么我会使用 coreAnimation。让我知道结果如何。

    【讨论】:

    • 所以你建议使用touchesBegan、moved等方法?
    • 是的,但不是调整框架,而是使用边界。 Bounds 应该是您应该调整的正确属性。
    • 有人能解释为什么他们给了我反对票吗?如果是,为什么?
    • 在这里,通过谷歌搜索,我发现这篇文章解释得很清楚。 stackoverflow.com/questions/8460119/…
    • 所以现在无论谁给我的答案是否定的,我都会感激它加分