2013-06-19 4 views
1

В моем UIViewController я использую UILabel для названия навигации в xib. Но текст слишком длинный, поэтому мне нужна анимация. Некоторые вещи, как перемещение слева направо UILabel?Возможно ли переместить uilabel в навигационной панели слева направо?

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

float newX = 90.0f; 
float newY = 101.0f; 

[UIView transitionWithView:label 
        duration:0.5f 
        options:UIViewAnimationCurveEaseInOut 
       animations:^(void) { 
        label.center = CGPointMake(newX, newY); 
       } 
       completion:^(BOOL finished) { 
        // Do nothing 
       }]; 
+0

Вы пытались добавить, что UILabel к UIScrollView? Может быть, вы можете компенсировать scrollBy анимацией? – Konrad77

+0

Я не понял, что сказал – Navi

+0

Вместо инициализации вашего UIBarButtonItem с помощью UIlabel, запустите его с помощью UIScrollView, который имеет UILabel в качестве подзаголовка. – Konrad77

ответ

3

Я понимаю, что вы хотите marquee эффект, который переместит каждого символа в метку справа.

Вот как это сделать.

NSTimer Первый набор в viewDidAppear: метод для вызова метода animateLabel с с заданным интервалом времени, как показано ниже:

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 
    NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:0.4 target:self selector:@selector(animateLabel:) userInfo:nil repeats:YES]; 
} 

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

- (void)animateLabel:(NSTimer *)timer 
{ 
    int labelSize = label.text.length; 
    label.text = [NSString stringWithFormat:@"%c%@", [label.text characterAtIndex:labelSize - 1], [label.text substringWithRange:NSMakeRange(0, labelSize - 1)]]; 
} 

P.S. : Я не видел такого эффекта выделения на заголовок навигации. Я видел некоторые популярные приложения, где, если ярлык достаточно длинный, чтобы не вписываться в заголовок навигации, они сохраняют его как есть с ... в конце. Я не говорю, что вы должны сделать то же самое, но просто хотите сказать вам.

EDIT: Для этого справа налево:

- (void)animateLabel:(NSTimer *)timer 
{ 
    int labelSize = label.text.length; 
    label.text = [NSString stringWithFormat:@"%@%c", [label.text substringWithRange:NSMakeRange(1, labelSize - 1)], [label.text characterAtIndex:0]]; 
} 
+0

label.length; нет свойства вроде этого – Navi

+0

Я сохраню текст в NSString и найду длину, и я скопирую этот текст в uilabel..thanks akash – Navi

+0

@ user2439088 Не нужно копировать в отдельной NSString. См. Мой отредактированный код. – Geek

0

Если то, что вы имеете в виду опять перемещение UILabel к одной точке и обратно, почему бы вам не использовать завершение, чтобы вызвать другую анимацию?

+0

нет мне нужен гладкий круглый – Navi

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