web-dev-qa-db-fra.com

Comment faire pivoter du texte pour UIButton et UILabel dans Objective-C?

Comment faire pivoter le texte pour UIButton et UILabel? 90 degrés, 180 degrés.

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

image pivotée enter image description here

image perméable enter image description here

168
Gypsa

Essaye ça:

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

Je voulais apporter une réponse alternative.

Au lieu de faire pivoter UILabel, vous pouvez faire pivoter le texte dans l'étiquette en dérivant une sous-classe de UILabel et en remplaçant drawRect. Si vous utilisez Interface Builder, vous pouvez spécifier cette sous-classe au lieu de UILabel dans l'attribut Classe personnalisée de l'inspecteur d'identité. Cela vous permettra de créer votre interface utilisateur avec des XIB, au lieu de créer par programme les étiquettes. La seule mise en garde étant que le texte dans Interface Builder s'affichera horizontalement. Cependant, il sera rendu verticalement dans l'application elle-même.

#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
11
Andy S

Tu aimes ça,

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];
4
EXC_BAD_ACCESS

D'après mon expérience, le cadre UIView est modifié après l'application de la transformation, c'est donc ce que j'ai utilisé:

    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);
3
lbl.transform=CGAffineTransformMakeRotation(M_PI);

//Go back 

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

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

OR

lable.transform= CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(270));
1
Bhavesh Nayi