将视图旋转90度iOS

时间:2016-05-26 06:04:18

标签: ios objective-c rotation

当我尝试在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坐标已经改变,这导致视图在其容器上设置不正确。我无法理解在设置框架时要更改它们的公式。

2 个答案:

答案 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));

希望它有所帮助!!