每隔30秒改变UILabel- Iphone

时间:2013-10-29 14:04:26

标签: ios objective-c

我正在开发一款iphone应用程序并拥有一个UILabel,我希望每30秒更换一次,但保持相同的框架,以便一个消失,然后显示另一个。使用此代码,所有标签都会立即绘制,然后终止。我也在使用ARC。

-(void)viewDidLoad
{
    [super viewDidLoad];
    label1= [[UILabel alloc] initWithFrame:CGRectMake(80, 200, 100, 50)];
    label1.text=@"test";
    label1.backgroundColor= [UIColor clearColor];

    [self.view addSubview:label1];

    label2= [[UILabel alloc] initWithFrame:CGRectMake(80, 200, 100, 50)];

    label2.text=@"change";

    label2.backgroundColor= [UIColor clearColor];
    [self.view addSubview:label2];
...

    warmup = [[NSMutableArray alloc] initWithObjects:label1,label2,label3, nil];

    timer=[NSTimer scheduledTimerWithTimeInterval:30.0 target:self selector:@selector(rotatewarmup )userInfo:nil repeats:YES];
}


-(void)rotatewarmup
{

        for (NSUInteger i = 0; i < [warmup count]; i++) {

        UILabel *label=[[UILabel alloc] initWithFrame:CGRectMake(80, 200, 100, 50)];

        label.textColor=[UIColor whiteColor];

        label.text =[warmup objectAtIndex:i];

        NSString*string=[[NSString alloc] initWithFormat:@"%i"];
        [label setText:string];

        [self.view addSubview: label];
}

2 个答案:

答案 0 :(得分:3)

您有两个选项可以创建一个标签,然后使用计时器调用更改其文本的方法(如果您愿意,可以使用核心动画进行动画制作)或

您可以(稍微低效一点)创建两个标签,并使用计时器调用一个方法,将一个α的alpha更改为0,另一个的alpha更改为1.

同样,您可以使用动画块来使此过程不会受到刺激。

如果您需要我扩展其中任何一个步骤,请告诉我?

答案 1 :(得分:1)

此代码每隔30秒更改一次uilabel文本,首先:

timer = [NSTimer scheduledTimerWithTimeInterval:30.0 target:self selector:@selector(rotatewarmup )userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer: timer forMode: NSDefaultRunLoopMode];

第二

-(void)rotatewarmup
{

        for (UILabel* label in warmup) {
        NSString*string=[[NSString alloc] initWithFormat:@"%@%@",label.text,label.text];
        [label setText:string];}
}

如果你想要每30秒简单的动画秀隐藏uilabel:

-(void)viewDidLoad
{
     ....
    [self hideLabel:label3]
}
- (void) hideLabel: (UILabel*) label
{
    [UIView animateWithDuration:10.0
                     animations:^{
                         label.alpha = 0;
                     }
                     completion:^(BOOL finished) {
                         NSInteger nextIndex = [warmup indexOfObject:label] - 1;
                         if(nextIndex > 0)
                         {
                               UILabel* nextLabel = [warmup objectAtIndex:nextIndex];
                               [self hideLabel:nextLabel];
                         }else{
                               UILabel* nextLabel = [warmup objectAtIndex:nextIndex + 1];
                               [self showLabel:nextLabel];
                         }
                     }];
}

- (void) showLabel: (UILabel*) label
{
    [UIView animateWithDuration:10.0
                     animations:^{
                         label.alpha = 1;
                     }
                     completion:^(BOOL finished) {
                         NSInteger nextIndex = [warmup indexOfObject:label] + 1;
                         if(nextIndex < [warmup count] -1)
                         {
                               UILabel* nextLabel = [warmup objectAtIndex:nextIndex];
                               [self showLabel:nextLabel];
                         }else{
                               UILabel* nextLabel = [warmup objectAtIndex:nextIndex - 1];
                               [self hideLabel:nextLabel];
                         }
                     }];
}