我有问题。我正在制作游戏。作为游戏的一部分,我需要旋转图像,然后在游戏循环内沿旋转角度的方向移动(使用NSTimer
)。本质上,我试图创造发射射弹的效果。在垂直方向(例如0度,90度,180度,270度和360度)移动时,代码工作正常,但任何其他角度和图像开始出现故障。屏幕上的对象保持其正确的边界和内容,但实际显示的图像消失。有人知道问题是什么,或者我可以解决它吗?如果需要,我可以制作并发布我的问题视频,以便您可以看到我正在谈论的内容。
以下是我使用的代码示例。 "背景"变量只是UIImageView
:
angle = 60;
background.transform = CGAffineTransformRotate(object.transform, angle*M_PI/180); //converts degrees to radians and rotates the image
background.frame = CGRectMake( background.frame.origin.x + cos(angle*m_PI/180)*32; background.frame.origin.y -sin(angle*M_PI/180)*32, background.frame.size.width, background.frame.size.height); //moves the image in the direction of the angle
答案 0 :(得分:1)
对于初学者来说,CGRect
中的x原点后面有一个分号而不是逗号。那只是一个错字吗?
The UIView
documentation for frame
州:
警告:如果transform属性不是identity变换,那么 此属性的值未定义,因此应忽略。
可以设置对此属性的更改。但是,如果改造 property包含一个非标识变换,即帧的值 属性未定义,不应修改。在那种情况下,你 可以使用center属性重新定位视图并调整大小 使用bounds属性。
因此,您可以在设置自定义frame
时尝试更改transform
。您只是尝试调整视图的位置,因此只需修改代码即可调整center
而不是原点坐标。
要更改尺寸,您可以使用bounds
。
CGRect bounds = myView.bounds;
bounds.size.width = whatever;
bounds.size.height = whatever;
myView.bounds = bounds;