2013-03-28 4 views
2


Мне интересно, как можно сделать перемещение текста справа налево, как «текущая новостная лента в телевизоре»?
Я могу сделать текст, перемещающийся справа налево (или любой другой) в UILabel, но это перемещение анимации должно быть бесконечным циклом, а не только один раз.IOS: сделать бегущий текст «бегущей новостной линией в ТВ»?

+0

возможно дубликат http://stackoverflow.com/questions/1118626/how-to-add-marquee-to-a-label – iPatel

+0

HTTP: // stackoverflow.com/questions/10327667/uilabel-text-glow-and-marquee – iPatel

ответ

1

Как насчет так:

-(void) animate { 

    label.center = CGPointMake(self.view.bounds.size.width + label.bounds.size.width/2, label.center.y); 
    [UIView animateWithDuration:20 delay:0 options:(UIViewAnimationOptionCurveLinear | UIViewAnimationOptionRepeat) animations:^{ 

     label.center = CGPointMake(0 - label.bounds.size.width/2, label.center.y); 

    } completion:nil]; 

} 
0
// CrawlView.h 

#import <UIKit/UIKit.h> 

@interface CrawlView : UIScrollView 

@property (assign, nonatomic) NSTimeInterval period; 
@property (strong, nonatomic) NSMutableArray *messages; 

- (void)go; 

@end 

// CrawlView.m 

#define kWORD_SPACE 16.0f 

#import "CrawlView.h" 

@interface CrawlView() 
@property (assign, nonatomic) CGFloat messagesWidth; 
@end 

@implementation CrawlView 


- (void)buildSubviews { 

    for (UIView *subview in [self subviews]) { 
     if ([subview isKindOfClass:[UILabel self]]) { 
      [subview removeFromSuperview]; 
     } 
    } 

    CGFloat xPos = kWORD_SPACE; 

    for (NSString *message in self.messages) { 
     UILabel *label = [[UILabel alloc] initWithFrame:CGRectZero]; 
     label.text = message; 
     CGSize size = [message sizeWithFont:label.font]; 
     CGFloat width = size.width + kWORD_SPACE; 
     label.frame = CGRectMake(xPos, 0.0, width, self.frame.size.height); 
     [self addSubview:label]; 
     xPos += width; 
    } 
    self.messagesWidth = xPos; 
    self.contentSize = CGSizeMake(xPos, self.frame.size.height); 
    self.contentOffset = CGPointMake(-self.frame.size.width, 0.0); 
} 

- (void)go { 

    [self buildSubviews]; 
    if (!self.period) self.period = self.messagesWidth/100; 

    [UIView animateWithDuration:self.period 
          delay:0.0 
         options:UIViewAnimationOptionCurveLinear |UIViewAnimationOptionRepeat 
        animations:^{ 
         self.contentOffset = CGPointMake(self.messagesWidth, 0.0); 
        } completion:^(BOOL finished){ 
         [self buildSubviews];}]; 
} 

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