Làm thế nào bạn có thể xoay văn bản cho UIButton và UILabel trong Objective-C?


67
24
Hoàng Chí Khang
8 năm trước

Làm thế nào bạn có thể xoay văn bản cho UIButtonUILabel? 90 độ, 180 độ.

Hữu ích 67 Yêu thích 24 Chia sẻ Viết bình luận 2
Không hữu ích
Hữu ích 1 · Không hữu ích · Trả lời 0

bạn chỉ muốn xoay văn bản hoặc toàn bộ nhãn / nút?

Hữu ích 0 · Không hữu ích · Trả lời 0

7 Trả lời


167
Lê Thái Vân
8 năm trước
[*yourlabelname* setTransform:CGAffineTransformMakeRotation(-M_PI / 2)];

hình ảnh xoay

hình ảnh phổ biến

Hữu ích 167 Trả lời hay nhất Chia sẻ Viết bình luận 2
Không hữu ích

chỉ là một nhận xét nhỏ; cùng với M_PIbạn có quyền truy cập vào M_PI_2( pi / 2) và M_PI_4( pi / 4) để bạn có thể sử dụng chúng.

Hữu ích 7 · Không hữu ích · Trả lời 0

cập nhật cho Swift: stackoverflow.com/a/28717635/3681880

Hữu ích 0 · Không hữu ích · Trả lời 0

32
Vũ Minh Khoa
8 năm trước

Thử đi:

lbl.transform= CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(270));
Hữu ích 32 Chia sẻ Viết bình luận 2
Không hữu ích

#define DEGREES_TO_RADIANS (x) (M_PI * x / 180.0)

Hữu ích 12 · Không hữu ích · Trả lời 0

CGAffineTransformMakeRotation (- M_PI_2);

Hữu ích 6 · Không hữu ích · Trả lời 0

11
Hồ Hiền Hòa
6 năm trước

Tôi muốn cung cấp một phản ứng thay thế.

Thay vì xoay UILabel, bạn có thể xoay văn bản trong nhãn bằng cách lấy một lớp con từ UILabelvà ghi đè drawRect. Nếu bạn đang sử dụng Trình tạo giao diện, bạn có thể chỉ định lớp con này thay vì UILabeltrong thuộc tính Lớp tùy chỉnh của Trình kiểm tra danh tính. Điều này sẽ cho phép bạn xây dựng giao diện người dùng của mình với XIB, thay vì lập trình tạo nhãn. Thông báo trước duy nhất là văn bản trong Interface Builder sẽ hiển thị theo chiều ngang. Tuy nhiên, nó sẽ được hiển thị theo chiều dọc trong chính ứng dụng.

#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
Hữu ích 11 Chia sẻ Viết bình luận 1
Không hữu ích

Cố gắng xoay nhãn bên trong một nút sẽ khiến nhãn rất ngắn, ví dụ, nếu nút chỉ "rộng" như "chiều cao" của nhãn (khi nó được xoay). Áp dụng biến đổi như được đưa ra trong các câu trả lời khác cho UIButton thay vì nhãn của nút sẽ xoay cả nút và nhãn.

Hữu ích 0 · Không hữu ích · Trả lời 0

4
Trịnh Diễm Thư
8 năm trước

Bạn làm như thế này

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];
Hữu ích 4 Chia sẻ Viết bình luận 3
Không hữu ích

vì một số lý do lạ khi tôi sử dụng M_PI / 4, nhãn sẽ biến mất.

Hữu ích 2 · Không hữu ích · Trả lời 0

Tôi có thể sử dụng CGAffineTransformMakeRotation cho NSString không?

Hữu ích 0 · Không hữu ích · Trả lời 0

Có lẽ nó hợp lý để kết hợp ... nhưng có thể có ý tưởng nào để thực hiện nó?

Hữu ích 0 · Không hữu ích · Trả lời 0

3
Bùi Cao Sĩ
5 năm trước

Theo kinh nghiệm của tôi, khung UIView bị thay đổi sau khi áp dụng biến đổi, vì vậy đây là những gì tôi đã sử dụng:

    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);
Hữu ích 3 Chia sẻ Viết bình luận 0
Không hữu ích

1
Dương Huyền Trang
6 năm trước
lbl.transform=CGAffineTransformMakeRotation(M_PI);

//Go back 

lbl.transform=CGAffineTransformMakeRotation(0);
Hữu ích 1 Chia sẻ Viết bình luận 0
Không hữu ích

1
Bùi Ngọc Uyên
6 năm trước
//Right To Left
lable.transform = CGAffineTransformMakeRotation (3.14/2);

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

HOẶC LÀ

lable.transform= CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(270));
Hữu ích 1 Chia sẻ Viết bình luận 0
Không hữu ích

Trả lời của bạn

Xem trước nội dung