Objective C - 将省略号附加到居中对齐的 UILabel,但不要移动文本

Objective C - Append ellipsis to a UILabel that is centrally aligned, but don't move text

我有一个宽度接近 100% 的 UILabel。文本居中对齐。

我有一些代码要附加或以其他方式演练添加省略号。

然而,这会导致出现动画时 UILabel 移动的问题。这是因为文本居中对齐。

我希望我的代码添加或更新省略号而不是 "move" UILabel。

如果可以的话,我不想添加另一个标签,但如果这是唯一的解决方案,那就太好了。

代码如下;

// This is a method inside a custom UILabel subclass
- (void)startProgressAnimationWithInterval:(NSTimeInterval)interval
{
    self.isAnimatingProgress = YES;

    NSString *singleDot = @".";
    NSString *doubleDot = @"..";
    NSString *tripleDot = @"...";

    if (![self.text hasSuffix:tripleDot]) {
        self.text = [self.text stringByAppendingString:tripleDot];
    }

    self.progressTimer = [NSTimer vic_scheduledTimerWithTimeInterval:interval userInfo:nil action:^(NSTimer *timer, NSInteger repeatIndex) {
        if ([self.text hasSuffix:tripleDot]) {
            self.text = [self.text stringByReplacingOccurrencesOfString:tripleDot withString:singleDot];
        }
        else if ([self.text hasSuffix:doubleDot]) {
            self.text = [self.text stringByReplacingOccurrencesOfString:doubleDot withString:tripleDot];
        }
        else {
            self.text = [self.text stringByReplacingOccurrencesOfString:singleDot withString:doubleDot];
        }
    }];
}

有很多方法可以解决这个问题。例如,不是更改文本,而是将文本设置为包含省略号,然后只需将可变数量的椭圆点的字体颜色设置为标签 attributedText 的清晰颜色:

- (void)handleTimer:(NSTimer *)timer {
    if (++self.dotsToShow >= 4) self.dotsToShow = 0;  // an integer state that rotates 0, 1, 2, 3 and then repeats

    NSInteger dotsToHide = 3 - self.dotsToShow;

    NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:self.label.text];
    if (dotsToHide > 0) {
        [string setAttributes:@{NSForegroundColorAttributeName: [UIColor clearColor]} range:NSMakeRange(string.length - dotsToHide, dotsToHide)];
    }
    self.label.attributedText = string;
}