[英]Repeating self performSelector
我只是在徘徊如果有一種更簡單的方法來重復下面的代碼20秒。 如果有,怎么樣?
[self performSelector:@selector( move1) withObject:nil afterDelay:0.0];
[self performSelector:@selector( move2) withObject:nil afterDelay:0.2];
[self performSelector:@selector( move3) withObject:nil afterDelay:0.4];
[self performSelector:@selector( move1) withObject:nil afterDelay:0.8];
[self performSelector:@selector( move2) withObject:nil afterDelay:0.10];
[self performSelector:@selector( move3) withObject:nil afterDelay:0.12];
根據我的意見,請嘗試下面的代碼,
在Controller的.h文件中取一個NSInteger,像這樣,
NSInteger intTmp;
然后在.m文件中調用NSTimer方法,
[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(testMethod:) userInfo:nil repeats:YES];
並像這樣寫選擇器
-(void)testMethod:(NSTimer *)pTmpTimer
{
intTmp += 1;
if(intTmp <= 20)
{
[self performSelector:@selector( move1) withObject:nil afterDelay:0.0];
[self performSelector:@selector( move2) withObject:nil afterDelay:0.2];
[self performSelector:@selector( move3) withObject:nil afterDelay:0.4];
[self performSelector:@selector( move1) withObject:nil afterDelay:0.8];
[self performSelector:@selector( move2) withObject:nil afterDelay:0.10];
[self performSelector:@selector( move3) withObject:nil afterDelay:0.12];
}
else
{
[pTmpTimer invalidate];
intTmp = 0;
}
}
從上面的代碼中,testMethod將調用20次,並根據您的要求,您的代碼將重復20次..
希望對你有效。
快樂的編碼..
您可以使用NSTimer,並且在計時器調用的選擇器中,您可以調用下一個適當的移動方法。
你可以用
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)seconds target:(id)target selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)repeats
userInfo可用於將一些數據傳遞給選擇器,選擇器可以從該選擇器接下一個移動或最近調用的移動。
NSTimer *myTimer = [NSTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(invokeMove:) userInfo:[NSNumber numberFromInt:1] repeat:NO];
你的選擇器可能是:
-(void)invokeMove:(id)nextMove
{
if ([nextMove isKindOfClass: [NSNumber class]])
{
int veryNextMove = 0;
switch ([nextMove intValue])
{
case 1:
veryNextMove = 1;
case 2:
veryNextMove = 2;
case 3:
veryNextMove = 3;
}
if (veryNextMove == 0)
return;
NSTimer *myTimer = [NSTimer scheduledTimerWithTimeInterval 0.2 target:self selector:@selector(invokeMove:) userInfo:[NSNumber numberFromInt:2] repeat:NO];
//Assuming you use ARC.
}
}
安排一個間隔為1的計時器,並在選擇器中編寫您的代碼。
timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(callMethods) userInfo:nil repeats:YES];
選擇器方法
- (void) callMethods {
static int i = 0;
if(i < 19) {
//your code here
for(int j=0; j<2 ;j++) {
[self performSelector:@selector( move1) withObject:nil afterDelay:(j*8)/10];
[self performSelector:@selector( move2) withObject:nil afterDelay:((j*8)/10)+0.2];
[self performSelector:@selector( move3) withObject:nil afterDelay:((j*8)/10)+0.4];
}
}
else {
i = 0;
[timer invalidate];
}
i++;
}
-(void)trickShot{
[self performSelector:@selector( move1) withObject:nil afterDelay:0.0];
[self performSelector:@selector( move2) withObject:nil afterDelay:0.2];
[self performSelector:@selector( move3) withObject:nil afterDelay:0.4];
[self performSelector:@selector( move1) withObject:nil afterDelay:0.8];
[self performSelector:@selector( move2) withObject:nil afterDelay:0.10];
[self performSelector:@selector( move3) withObject:nil afterDelay:0.12];
[self performSelector:@selector( trickShot) withObject:nil afterDelay:20];
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.