gpt4 book ai didi

ios - iPhone NSTimer 运行单一方法

转载 作者:行者123 更新时间:2023-11-29 04:50:25 24 4
gpt4 key购买 nike

我是 iPhone 编程新手,我在使用此功能时遇到问题

-(IBAction)changeX {
[self timere:field1];
[self timere:field2];
}

这是一个用于在屏幕上移动 uitextfield 对象的按钮。问题是我想在第一个字段上运行这个方法,完成它然后继续第二个字段。 timere 函数使用 NSTimer 连续移动对象,直到到达某个点并终止。我还有另外两个函数,如下所示。我制作的实际程序要长得多,但目标是相同的,并且代码太长。问题是运行第一个函数然后运行第二个函数。谢谢您的帮助。

-(void)timere:(UITextField*)f1 {

UITextField*fielder1=f1;
NSInvocation*timerInvocation = [NSInvocation invocationWithMethodSignature:
[self methodSignatureForSelector:@selector(moveP:)]];


[timerInvocation setSelector:@selector(moveP:)];
[timerInvocation setTarget:self];
[timerInvocation setArgument:&fielder1 atIndex:2];

timer1 = [NSTimer scheduledTimerWithTimeInterval:0.03 invocation:timerInvocation repeats:YES];
}


-(void) moveP:(UITextField*)f1 {

UITextField*fielder1=f1;
fielder1.center = CGPointMake(fielder1.center.x+4, fielder1.center.y);
if (fielder1.center.x>237) {
[timer1 invalidate];
}

}

最佳答案

对 UIView 对象进行动画处理的标准化方法是使用如下方法。

+ animateWithDuration:delay:options:animations:completion:

如果您不熟悉 Objective-C Blocks,这些方法的语法可能会有点令人畏惧。 .这是一个使用示例,它移动第一个字段,然后移动第二个字段。

[UIView animateWithDuration:0.3 animations:^{
[field1 setCenter:CGPointMake(FINAL_CENTER_X1, FINAL_CENTER_Y1)];
} completion:^(BOOL finished) {
[UIView animateWithDuration:0.3 animations:^{
[field2 setCenter:CGPointMake(FINAL_CENTER_X2, FINAL_CENTER_Y2)];
}];
}];

编辑:为了对您的特定问题进行一般修复,我将进行以下修改:

-(IBAction)changeX {
[self timere:field1];
}

-(void) moveP:(UITextField*)f1 {

UITextField*fielder1=f1;
fielder1.center = CGPointMake(fielder1.center.x+4, fielder1.center.y);
if (fielder1.center.x>237) {
[timer1 invalidate];
// I'm really not sure about the scope of field1 and field2, but
// you can figure out the encapsulation issues
if (f1 == field1) {
[self timere:field2];
}
}

}

一个更通用且实际上低级的解决方案是使用状态变量。也许你会有某种 NSArray *fieldsUITextField *int state = 0 .我在moveP中添加了条件上面,你会state++并调用[self timere:[fields objectAtIndex:state]]如果state < [fields count] .无论如何,你的计时器失效代码是正确的。

关于ios - iPhone NSTimer 运行单一方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8950293/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com