0

我正在开发一个 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];
}
4

2 回答 2

3

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

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

同样,您可以使用动画块使此过程不刺耳。

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

于 2013-10-29T14:26:31.287 回答
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];
                         }
                     }];
}
于 2013-10-29T15:24:57.847 回答