我正在开发一款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];
}
答案 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];
}
}];
}