2015-05-19 8 views
3

Я хочу оживить UILabel, чтобы вытереть текст слева направо. Мой код ниже сразу исчезает во всей UILabel, но я хотел бы идти буквально или словом. Кроме того, слова могут быть добавлены в этот текст, и когда это произойдет, я хочу снова исчезнуть в новых словах, а не во всей UILabel.Увядание UILabel слева направо

__weak ViewController *weakSelf = self; 
weakSelf.label.alpha = 0; 
[UIView animateWithDuration:0.5 delay:0 options:UIViewAnimationOptionCurveEaseIn 
       animations:^{ weakSelf.label.alpha = 1;} 
       completion:nil]; 

ответ

4

Ну, я знаю, как бы я это сделал. Я бы сделал маску, содержащую градиент, и анимировал маску на лицевой стороне этикетки.

Вот результат, когда я делаю это (не знаю, является ли это именно то, что вы имеете в виду, но, возможно, это начало):

enter image description here

3

Я сделал это один раз, прежде чем достойные результаты , Вам, вероятно, придется настроить его по своему усмотрению.

Первый шаг - создать изображение градиента в соответствии с тем, как вы хотите, чтобы текст затухал. Если ваш цвет текста черный, вы можете попробовать это.

- (UIImage *)labelTextGradientImage 
{ 
    CAGradientLayer *l = [CAGradientLayer layer]; 
    l.frame = self.label.bounds; 
    l.colors = [NSArray arrayWithObjects:(id)[[UIColor colorWithRed:0 green:0 blue:0 alpha:0] CGColor], (id)[[UIColor colorWithRed:0 green:0 blue:0 alpha:1] CGColor], nil]; 
    l.endPoint = CGPointMake(0.0, 0.0f); 
    l.startPoint = CGPointMake(1.0f, 0.0f); 

    UIGraphicsBeginImageContext(self.label.frame.size); 
    [l renderInContext:UIGraphicsGetCurrentContext()]; 
    UIImage *textGradientImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    return textGradientImage; 
} 

Этот код создает черное изображение, которое должно исчезать слева направо.

Затем, когда вы создаете ярлык, вам нужно установить его цвет текста на основе шаблона, сделанного из только что созданного изображения.

self.label.alpha = 0; 
self.label.textColor = [UIColor colorWithPatternImage:[self labelTextGradientImage]]; 

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

[UIView transitionWithView:self.label duration:0.2 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{ 
    self.label.textColor = [UIColor blackColor]; 
    self.label.alpha = 1; 
} completion:^(BOOL finished) { 
}]; 

анимация код немного напуганный, потому что свойство TextColor в UILabel по-видимому, не будет анимируемым с UIViewAnimation.