【问题标题】:How can you rotate text for UIButton and UILabel in Objective-C?如何在 Objective-C 中旋转 UIButton 和 UILabel 的文本?
【发布时间】:2011-09-13 16:18:00
【问题描述】:

如何旋转UIButtonUILabel 的文本? 90度,180度。

【问题讨论】:

标签: ios objective-c uibutton rotation uilabel


【解决方案1】:

我想提供另一种回应。

您可以通过从UILabel 派生一个子类并覆盖drawRect 来旋转标签 中的文本,而不是旋转UILabel。如果您使用的是 Interface Builder,则可以在 Identity Inspector 的 Custom Class 属性中指定此子类而不是 UILabel。这将允许您使用 XIB 构建您的 UI,而不是以编程方式创建标签。唯一需要注意的是 Interface Builder 中的文本将水平显示。但是,它将在应用程序本身中垂直呈现。

#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 而不是按钮的标签将旋转按钮和标签。
【解决方案2】:
//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));

【讨论】:

    【解决方案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);
    

    【讨论】:

      【解决方案4】:
      lbl.transform=CGAffineTransformMakeRotation(M_PI);
      
      //Go back 
      
      lbl.transform=CGAffineTransformMakeRotation(0);
      

      【讨论】:

        【解决方案5】:

        试试这个:

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

        【讨论】:

        • #define DEGREES_TO_RADIANS(x) (M_PI * x / 180.0)
        • CGAffineTransformMakeRotation(- M_PI_2);
        【解决方案6】:

        你喜欢这样,

        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 吗?
        • 也许结合起来是有意义的......但也许有任何想法如何实现它?
        • 由于某些奇怪的原因,当我使用 M_PI/4 时,标签消失了。
        【解决方案7】:
        [*yourlabelname* setTransform:CGAffineTransformMakeRotation(-M_PI / 2)];
        

        旋转图像

        上一张图片

        【讨论】:

        • 只是一个小评论;与M_PI 一起,您可以访问M_PI_2 (pi / 2) 和M_PI_4 (pi / 4),因此您可以使用它们。
        猜你喜欢
        • 2015-04-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多