2012-07-09 67 views
0

在我的应用程序中,我运行了大量的动画,移动的对象和形状等。 许多动画导致其他对象的动画。 应用程序的一个问题是,如果动画正在运行,并且您启动另一个涉及当前正在动画的对象之一,则屏幕变白/我们会得到意想不到的结果。检测可可动画是否正在进行(使用布尔),以防止多个同时动画

我工作了一些示例代码来展示我们正在尝试做的:

UIButton *button; 
BOOL currentlyShowingQuestion; 
- (void)viewDidLoad 
{ 
    [self moveButton:button]; 
    currentlyShowingQuestion = NO; 
    [NSTimer scheduledTimerWithTimeInterval:.1 target:self selector:@selector(hasBoolChanged) userInfo:nil repeats:YES]; 
} 
- (void)moveButton:(UIButton *)buttonToUse { 
    currentlyShowingQuestion = YES; 
    NSLog(@"moveButton Called! Yippee!!!!!!!"); 
    [UIView animateWithDuration:0.5 delay:0.5 options:nil animations:^{ 
     buttonToUse.frame = CGRectMake(10, 10, 300, 440); 
    } completion:^(BOOL finished){ 
     currentlyShowingQuestion = NO; 
    }]; 
} 

-(void)hasBoolChanged { 
    if (currentlyShowingQuestion == YES) { 
     NSLog(@"Yes"); 
    } 
    else if (currentlyShowingQuestion == NO) { 
     NSLog(@"No"); 
    } 
} 

我到底是什么了实际上看到的是像currentlyShowingQuestion BOOL方法运行时都得到迅速改变,所以它的变化到YES并立即返回到NO。然后动画运行。为什么是这样?订单有什么问题?

任何帮助表示赞赏。 对不起,关于代码格式 - 我无法弄清楚这里的语法。

由于提前,

山姆

回答

0

我真的不明白你想达到什么目的。开始时你启动一个计时器来检查布尔值是否已经改变。我认为这对于这项任务来说有点矫枉过正,但那没关系。 由于某种原因,您的动画延迟了0.5秒,然后您的动画持续时间为0.5秒,而且速度非常快,因此看起来您可以立即更改该值。

0

我不是太熟悉的UIView,但根据文档,完成块可能之前动画的成品被调用。在将currentlyShowingQuestion更改为NO之前,尝试添加条件是否已完成为YES。

相关问题