当旋转时,UILabel文本被截断。如何修复?

5
我正在创建一个水印,将其覆盖在图像视图上。该图像可以进行平移、缩放等操作。
我已经创建了一个水印视图类,在调整大小时,会覆盖一个文本标签,该标签的大小适合于边界。这个功能非常好用,随着图像的大小变化,它也会自动调整大小等。
现在我想旋转标签。但是一旦应用变换,标签中的文本就会被截断。我认为我很接近解决方法,但由于我是新手,可能做了一些愚蠢的事情。有什么想法吗?
以下是我的类:
@interface WatermarkView ()
- (CGFloat)biggestBoldFontForString:(NSString*)text inRect:(CGRect)rect;
@end

@implementation WatermarkView

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) 
    {
        // create a label that will display the watermark
        mainLabel = [[UILabel alloc] initWithFrame:frame];
        mainLabel.alpha = 0.35;
        mainLabel.backgroundColor = [UIColor clearColor];
        mainLabel.text = @"watermark";
        mainLabel.font = [UIFont boldSystemFontOfSize:[self biggestBoldFontForString:mainLabel.text inRect:mainLabel.frame]];
        mainLabel.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;

        // rotate label to a random slanted angle
        mainLabel.transform = CGAffineTransformMakeRotation(RANDOM_FLOAT(-M_PI/5, -M_PI/6));

        [self addSubview:mainLabel];
    }
    return self;
}

- (void)dealloc
{
    [mainLabel release];

    [super dealloc];
}

- (CGFloat)biggestBoldFontForString:(NSString*)text inRect:(CGRect)rect
{
    CGFloat actualFontSize = 200;
    [text sizeWithFont:[UIFont boldSystemFontOfSize:200] minFontSize:1 actualFontSize:&actualFontSize forWidth:rect.size.width lineBreakMode:0];
    return actualFontSize;
}

- (void)layoutSubviews 
{
    [super layoutSubviews];

    mainLabel.font = [UIFont boldSystemFontOfSize:[self biggestBoldFontForString:mainLabel.text inRect:self.frame]];
}

@end

你解决问题了吗? - newenglander
你说“现在我想旋转标签”,这是指用户旋转设备时吗? - Patrick
2个回答

0
一个简单的解决方案可能是创建第二个标签,就像您的第一个标签一样,但适应旋转视图。将其保持隐藏或alpha = 0,然后在旋转时隐藏初始textView并显示新文本。
另一个问题可能是您的框架太小了,一旦旋转,请尝试保持所需字体大小和文本居中对齐,但使TextView框架比您认为需要的要大得多。

0

例如:

@synthesize labelWidth

(void)viewDidLoad
{
self.labelWidth = _label.bounds.size.width;
_label.transform = CGAffineTransformMakeRotation(-1.3f);
}

-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
CGRect bounds = _label.bounds;
bounds.size.width = self.labelWidth;
_label.bounds = bounds;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接