Ios 从角点调整旋转视图的大小

Ios 从角点调整旋转视图的大小,ios,uiview,cgaffinetransform,Ios,Uiview,Cgaffinetransform,我有一个UIView selectFrame,它有四个角手柄作为子视图。每个角点句柄都有一个UIPangestureRecognitor,它调用此方法: 这是我的代码(self是selectFrame UIView): 这段代码在没有旋转的情况下运行得非常好,但是在UIView旋转的情况下,它会漂移 然而,如果我在手势结束时进行整个计算,那么 if (gesture.state != UIGestureRecognizerStateEnded) return; 在方法的顶部,它甚至在旋

我有一个UIView selectFrame,它有四个角手柄作为子视图。每个角点句柄都有一个UIPangestureRecognitor,它调用此方法:

这是我的代码(self是selectFrame UIView):

这段代码在没有旋转的情况下运行得非常好,但是在UIView旋转的情况下,它会漂移

然而,如果我在手势结束时进行整个计算,那么

if (gesture.state != UIGestureRecognizerStateEnded)
    return;
在方法的顶部,它甚至在旋转时也能很好地工作,因此代码似乎可以工作,但这可能是舍入错误吗

这个问题似乎有很多不同的说法,但经过几个小时的研究,我找不到一个确切的答案。有许多从中心调整大小的粘贴视图示例可用。这个问题得到了非常完整的答案,但它并没有真正回答这个问题


编辑:有很多回答建议使用三角学,我也尝试过,但在我看来,简单地使用CGAffineTransforms应该是可能的。我对此进行了试验,但没有取得好的效果。

我们在积累不同的转换时也遇到了问题。只有平移、缩放或旋转才能正常工作。但是,如果我在平移后旋转,或者反之亦然,则旋转会围绕父视图的0,0旋转视图,缩放会使图像漂移,如您的问题中所述

以下两件事解决了我们的问题:

  • 对于这些手势中的每一个,如果状态为UIgestureRecognitizerStateStarted,我们将旋转的视图的定位点设置为0.5、0.5

    view.layer.ancorpoint=CGPointMake(0.5,0.5)

  • 当我们平移或缩放视图时,我们将获得视图的当前变换,并使用新的(缩放/平移)变换将其合并,如下所示:
    CGAffineTransformConcat(当前转换、新转换)

    然而,在旋转的情况下,我们使用newTransformation第一个参数和currentTransformation作为第二个参数,如下所示:
    CGAffineTransformConcat(新转换、当前转换)

  • 请密切注意,我们传递要连接的转换的顺序很重要,如中所述


    此外,阅读以更好地理解主播点,以及为什么它可能与您的问题有关

    我在github上建立了一个项目,用于移动、旋转和缩放。它仅使用CGAffineTransforms进行旋转。此项目在视图的角上具有拖曳控制柄,并从相反的角和旋转控制柄调整大小

    它使用了Erica Sadun的文章和


    链接到我的可调整大小的项目:

    你能解决这个问题吗?还没有-我已经偏离了方向,但最终会回到它。希望学习一些线性代数会有所帮助!
    if (gesture.state != UIGestureRecognizerStateEnded)
        return;