【问题标题】:Changing the anchorpoint and then rotating using CGAffineTransformMakeRotation更改锚点,然后使用 CGAffineTransform MakeRotation 旋转
【发布时间】:2015-08-05 12:43:05
【问题描述】:

我正在尝试围绕不同的锚点旋转 UIView。当我第一次创建 UIView 时,我将锚点设置为 (0.0, 0.5)。我使用 CGAffineTransformMakeRotation 旋转视图。当我单击 UIView 的另一侧时,我想将锚点设置为 (1.0, 0.5)。这会移动 UIView 以将锚点设置为中心点。我阅读了其他我应该这样做的答案: “将边界的宽度和高度乘以新旧锚点的归一化值,取两个锚点的差,并将该差应用于图层的位置”

我试过了,但我无法将 UIView 设置到完全相同的位置。使用此代码:

self.transform = CGAffineTransformTranslate(self.transform, self.bounds.size.width, 0);

将它设置到完全相同的位置,但是。当我再次旋转(它应该围绕新的锚点旋转)时,它会翻转 UIView 或发生一些奇怪的事情。

【问题讨论】:

    标签: ios rotation translate-animation


    【解决方案1】:

    当你因为锚点的变化而重新定位视图时,尽量不要使用transform属性。相反,使用frame 属性或center 属性(或position,如果您正在使用CALayer 对象)移动您的视图。另外,你能发布更多代码来展示如何精确地旋转视图吗?

    【讨论】:

    • 我使用 theAngle = atan2(pointofTouch.y - self.center.y, pointofTouch.x - self.center.x);总弧度=角度; self.transform = CGAffineTransformMakeRotation(弧度);我从来没有使用框架或中心将视图重新定位到完全相同的位置。另外,我已经设法通过使用 self.transform = CGAffineTransformRotate(self.transform, totalRadians - oldRadians); 解决了部分问题。翻译后。但这不会更新中心,所以我围绕正确的锚点旋转视图,但从不同的中心(中心永远不会更新)。
    • 我知道您是如何使用翻译的,因为您在原始帖子中清楚地解释了这一点。我只是说移动框架有时可能是一种更好的做法(当您只进行翻译时),因为非身份转换使框架属性不可用(但诚然与这种情况无关)。好吧,很高兴你解决了这个问题。下次提供更多关于这种情况的信息(无法从您的原始问题中修复 totalRadians-oldRadians),您将更快地解决问题 =)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-21
    • 2012-02-04
    相关资源
    最近更新 更多