当我尝试在iOS
中旋转视图时,其坐标已更改。
我想将矩形视图旋转90度,但我的问题是旋转后视图没有正确定位在框架中。
self.frame = CGRectMake(0, 0, screenWidth, screenHeight);
NSLog(@"BEFORE %@", NSStringFromCGRect(self.frame));
self.transform = CGAffineTransformMakeRotation(M_PI_2);
NSLog(@"AFTER %@", NSStringFromCGRect(self.frame));
这是Log
BEFORE {{0, 0}, {414, 636}}
AFTER {{-161, 160.99999999999997}, {636, 414}}
你可以看到X和Y坐标已经改变,这导致视图在其容器上设置不正确。我无法理解在设置框架时要更改它们的公式。
答案 0 :(得分:1)
我有一个应用程序,我可以根据需要旋转视图(myView)。 我这样做:
#define DegreesToRadians(x) ((x) * M_PI / 180.0)
CGRect rect = myView.frame;
myView.transform = CGAffineTransformMakeRotation(DegreesToRadians(-90));
myView.frame = CGRectMake(
rect.origin.x,
rect.origin.y,
rect.size.height,
rect.size.width // notice that Width and height are interchanged
);
请记住,旋转视图时,它将围绕其原点旋转,而不是围绕其中心旋转。因此,您必须根据需要计算视图旋转后的新原点和大小。
或者像我一样重新应用存储在“rect”中的正确原点和宽度/高度。
答案 1 :(得分:0)
尝试以正确的方式使用边界:
self.frame = CGRectMake(0, 0, screenWidth, screenHeight);
NSLog(@"BEFORE %@", NSStringFromCGRect(self.frame));
self.transform = CGAffineTransformMakeRotation(M_PI_2);
self.frame = CGRectMake(0, 0,
CGRectGetWidth(self.bounds),
CGRectGetHeight(self.bounds));
NSLog(@"AFTER %@", NSStringFromCGRect(self.frame));
希望它有所帮助!!