2015-03-01 4 views
1

У меня есть UILabel, ширина которого составляет около 100%. Текст выравнивается по центру.Цель C - добавить многоточие в UILabel, который выровнен по центру, но не перемещать текст

У меня есть код для добавления или иного прохода добавления эллипсов.

Однако это вызывает проблему, когда UILabel перемещается во время анимации. Это связано с тем, что текст выровнен по центру.

Я бы хотел, чтобы мой код добавлял или иным образом обновлял эллипсы, но не «двигал» 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]; 
     } 
    }]; 
} 

ответ

1

Существует множество способов решения этой проблемы. Например, вместо того, чтобы изменить текст, установите текст включить эллипсы, а затем просто установить цвет шрифта с переменным числом точек эллипсов до прозрачного цвета 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; 
} 
+0

Это звучит как хорошее решение для создания нового ярлыка. Я попробую ! Моему фону нельзя доверять; его не всегда, как сплошной цвет, но я попробую его –

+0

Да, я установил эллипсы в прозрачный, так что независимо от вашего фона, он будет отображаться. – Rob

+0

Ваше решение работает, и я принял его. –

Смежные вопросы