gpt4 book ai didi

iphone - UIImageView旋转影响位置?

转载 作者:行者123 更新时间:2023-12-03 21:15:48 26 4
gpt4 key购买 nike

我有一个 UIImageView,它设置为使用加速度计的值在屏幕上上下移动,使用以下代码:

ship.center = CGPointMake(ship.center.x, ship.center.y+shipPosition.y);

其中shipPosition是在accelerometerDidAccelerate方法中设置的CGPoint,使用:

shipPosition.y = acceleration.x*60;

显然这工作得很好,而且非常简单。当我尝试做同样简单的事情时,我遇到了麻烦,根据图像的加速度改变图像的旋转。我这样做是使用:

ship.transform = CGAffineTransformMakeRotation(shipPosition.y);

出于某种原因,这会导致发生非常奇怪的事情,因为每次调用 main 方法时图像都会恢复到其原点。我可以看到图像移动到应有位置的帧,但随后立即弹回。

只有当我插入旋转线时才会出现此问题,注释掉它工作正常。我不知道这里发生了什么,我已经为不同的应用程序做过很多次,但从未遇到过这样的问题。事实上,我从我创建的另一个应用程序中复制了代码,该应用程序运行良好。

编辑:

真正让我困惑的是,当我使用以下方法将旋转角度从加速度更改为船舶位置时:

ship.transform = CGAffineTransformMakeRotation(ship.center.y/10);

当我这样做时,船实际上根据加速度计旋转,但没有移动,这很疯狂,因为改变的 ship.center.y 意味着船的位置正在改变,但它是不!!

最佳答案

在设置 View 的中心坐标或框架之前,您应该将 View 的变换设置回CGAffineTransformIdentity,然后应用新的变换。

frame 属性返回 View 的变换坐标(如果 View 已变换),而不是 true(实际上变换后的坐标为 true)。

引自 docs :

Warning: If the transform property is not the identity transform, the value of this property is undefined and therefore should be ignored.

<小时/>

更新/实际答案:
那么实际的问题是

shipPosition.y = acceleration.x*60;

自从您在 accelerometerDidAccelerate 中设置 y 位置后。
加速度不会记住它的旧值。因此,如果您移动设备,它会达到峰值,当您放慢速度时,它会再次减速。

您的飞船在最高加速速度下将为 +/-60,但当您停止移动设备时,该速度将为 0,并且 shipPosition.y 将为 0。

关于iphone - UIImageView旋转影响位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14269675/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com