【问题标题】:Rotate a view 90 degree iOS [duplicate]将视图旋转 90 度 iOS [重复]
【发布时间】:2016-09-23 23:31:34
【问题描述】:

当我尝试在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));

这是日志

     BEFORE {{0, 0}, {414, 636}}
     AFTER {{-161, 160.99999999999997}, {636, 414}}

U 可以看到 X 和 Y 坐标发生了变化,这导致视图在其容器上的设置不正确。我无法理解在设置框架时要考虑更改它们的公式。

【问题讨论】:

标签: ios objective-c rotation


【解决方案1】:

尝试以正确的方式使用边界:

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

希望对你有帮助!!

【讨论】:

    【解决方案2】:

    我有一个应用程序,我可以在其中完全按照您的需要旋转视图 (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”中的正确原点和宽度/高度。

    【讨论】:

      猜你喜欢
      • 2012-04-06
      • 1970-01-01
      • 2012-05-05
      • 1970-01-01
      • 1970-01-01
      • 2013-04-02
      • 1970-01-01
      • 1970-01-01
      • 2011-03-27
      相关资源
      最近更新 更多