所以这是我的代码:
- (IBAction)run:(id)sender {
animationPointer = 0;
self.animationArray = [[NSMutableArray alloc] init];
UIView *allViews = [[UIView alloc]
initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
for (int i = 0; i < [self.paths count]; i++) {
[allViews addSubview:[self createAnimation:[self.paths objectAtIndex:i]]];
[self.animationArray addObject:allViews];
}
timer = [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(animateTurn)
userInfo:nil repeats:YES];
}
- (void)animateTurn {
UIView *tempView = [self.animationArray objectAtIndex:animationPointer];
[self.view addSubview:tempView];
for (UIImageView *view in tempView.subviews) {
[[tempView.subviews objectAtIndex:animationPointer] startAnimating];
}
animationPointer++;
if (animationPointer >= [self.animationArray count]) {
[timer invalidate];
}
}
正如您所料, createAnimation
会返回一个完全动画的UIImageView
。计划是在每个UIView
上有几个,然后在UIView
上将它们全部设置为动画,然后在半秒后将其设置为动画并重复。现在每个UIView
只有一个。
但是,在NSTimer
上调用animateTurn时,动画不会显示。
如果我通过正常的[self animateTurn]
调用该方法,那么它们会显示但不会显示NSTimer
和performSelector
函数。
对此有任何帮助(甚至是更好方法的建议)?
修改 我应该提到函数实际上是被触发并且代码正在运行,包括startAnimating(用BOOL / NSLog检查)。根本没有任何东西被展示出来。
答案 0 :(得分:0)
这是您的解决方案: -
这就是我使用的,现在选择器正在工作。 :-)
if (![NSThread isMainThread])
{ [self performSelectorOnMainThread:@selector(selectorToRunInMainThread) withObject:nil waitUntilDone:NO];
}
-(void)selectorToRunInMainThread
{
NSString *str = @"Timer event has fired";
NSTimer *atimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateModel:) userInfo:str repeats:YES];
}
答案 1 :(得分:-1)
在计时器后面加上这一行: -
[timer fire];