如何在Objective-C中旋转UIButton和UILabel的文本?


Answers:


168
[*yourlabelname* setTransform:CGAffineTransformMakeRotation(-M_PI / 2)];

旋转图像 在此处输入图片说明

透水图像 在此处输入图片说明


7
只是一点点评论;以及M_PI您可以访问M_PI_2pi / 2)和M_PI_4pi / 4),因此可以使用它们。
加比·普卡鲁

33

尝试这个:

lbl.transform= CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(270));

13
#define DEGREES_TO_RADIANS(x)(M_PI * x / 180.0)
3lvis,2012年

6
CGAffineTransformMakeRotation(-M_PI_2);
丹尼斯

11

我想提供另一种回应。

除了旋转UILabel,还可以通过从中继承子类并重写来旋转标签的文本。如果使用的是Interface Builder,则可以指定此子类,而不是在Identity Inspector的“自定义类”属性中指定。这将允许您使用XIB构建您的UI,而无需以编程方式创建标签。唯一的警告是Interface Builder中的文本将水平显示。但是,它将在应用程序本身中垂直呈现。UILabeldrawRectUILabel

#import "RotatedLabel.h"

@implementation RotatedLabel

- (void)drawRect:(CGRect)rect
{
    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextSaveGState(context);
    CGContextRotateCTM(context, -(M_PI/2));

    UIFont* systemFont17 = [UIFont systemFontOfSize:17.0];
    CGSize textSize = [self.text sizeWithFont:systemFont17];
    CGFloat middle = (self.bounds.size.width - textSize.height) / 2;

    [self.text drawAtPoint:CGPointMake(-self.bounds.size.height, middle) withFont:systemFont17];

    CGContextRestoreGState(context);
}

@end

尝试旋转按钮内的标签将导致标签很短,例如,如果按钮的宽度仅与标签的“高度”一样(旋转时)。将其他答案中给出的变换应用于UIButton而不是按钮的标签,将同时旋转按钮和标签。
马特

4

你是这样的

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 50, 70)];

label.numberOfLines = 2;

label.text = @"text";

label.backgroundColor = [UIColor clearColor];

label.textColor = [UIColor whiteColor];


label.highlightedTextColor = [UIColor blackColor];

label.textAlignment = UITextAlignmentLeft;

label.font = [UIFont systemFontOfSize:12];



//rotate label in 45 degrees

label.transform = CGAffineTransformMakeRotation( M_PI/4 );


[self addSubview:label]; 
[label release];

我可以对NSString使用CGAffineTransformMakeRotation吗?
奥莱格(Oleg)2012年

也许结合起来很有意义...但是也许有什么想法可以实现它?
奥列格(Oleg)2012年

2
由于某些奇怪的原因,当我使用M_PI / 4时,标签消失了。
mskw 2012年

3

以我的经验,在应用转换后,UIView框架已更改,因此这是我使用的方法:

    UILabel *l = [[UILabel alloc] initWithFrame:CGRectMake(x, 0, 28, 159)];
    l.textAlignment = NSTextAlignmentRight;
    l.text = @"Hello!";

    [_viewXAxisLabels addSubview:l];
    [l setTransform:CGAffineTransformMakeRotation(-M_PI / 2)];
    l.frame = CGRectMake(x, 0, 28, 159);

1
lbl.transform=CGAffineTransformMakeRotation(M_PI);

//Go back 

lbl.transform=CGAffineTransformMakeRotation(0);

1
//Right To Left
lable.transform = CGAffineTransformMakeRotation (3.14/2);

//Left To Right
[lable setTransform:CGAffineTransformMakeRotation(-M_PI / 2)];

要么

lable.transform= CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(270));
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.