旋转UILabel最优雅的方式;保持左下角

时间:2014-06-09 10:12:25

标签: ios uiview transformation objective-c-category

假设您希望文本向上。当然,它很容易旋转90度:

someUIView.transform = CGAffineTransformMakeRotation(- 90.0f * M_PI / 180.0f);

但通常情况下,你希望它保持左下角

因此,在故事板IB中,您将(水平)文本放在您希望左下角的位置,并且您希望在应用程序运行时,文本是垂直的,即其中"新" 左下角的垂直文字将是。

enter image description here

这是UIView的一个类别......

-(void)standOnBottomLeftCorner
    {
    CGPoint org = self.frame.origin;
    org.y += self.frame.size.height;
    self.transform = CGAffineTransformMakeRotation(- 90.0f * M_PI / 180.0f);
    CGRect nu = self.frame;
    nu.origin = org;
    nu.origin.y -= nu.size.height; 
    self.frame = nu;
    }

但是,请注意:

JRT解释:"你不应该在转换后的视图上设置框架,它是未定义的行为。"

除非我喝醉了,否则有效.........但最好的方法是什么?


这个插图显示了马蒂奇非常聪明的想法:

enter image description here

1 个答案:

答案 0 :(得分:8)

更改图层的锚点将改变变换工作点。

在你的情况下,你需要将锚点设置在标签的中间位置,将左侧的高度设置为一半,如Matic所指出的那样:

CGRect frame = self.frame;
self.layer.anchorPoint = CGPointMake((frame.size.height / frame.size.width * 0.5),0.5); // Anchor points are in unit space
self.frame = frame; // Moving the anchor point moves the layer's position, this is a simple way to re-set
CGAffineTransform rotate = CGAffineTransformMakeRotation(- 90.0f * M_PI / 180.0f); // Performs the rotation
self.transform = rotate;

完成。您不应该在转换后的视图上设置框架,它是未定义的行为。