animateWithDuration在升级到xcode 4.6后导致ios4上的触摸事件出现问题

时间:2013-02-24 23:57:45

标签: ios ios4 xcode4.6

我有一个运行良好的应用程序,直到我升级到xcode 4.6。升级xcode 4.6后,在ios4上运行时没有收到任何触摸事件(在ios5和ios6上运行正常)。我尝试在IB中添加一个开关(没有连接,只是添加)。我可以在ios5和ios6设备上切换模拟器中的开关,但在ios4上我甚至无法移动开关。

我有一个在计时器上运行的小动画:

- (void)setFoamSize:(float)foamSize
{    
    // foamSize is a number between 0 - 100.  0 is min foam size; 100 is max foam size

    // NSLog(@"setFoamSize %f", foamSize);

    float centerX, centerY;
    float minHeight, minWidth;
    float maxHeight, maxWidth;
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
    {
        centerX     = 70.0;
        centerY     = 102.0f;

        minWidth    = 51.0f;
        minHeight   = 37.0f;

        maxWidth    = 111.0f;
        maxHeight   = 86.0f;
    }
    else
    {
        centerX     = 158.0f;
        centerY     = 151.0f;

        minWidth    = 74.0f;
        minHeight   = 64.0f;

        maxWidth    = 320.0f;
        maxHeight   = 271.0f;
    }


    float height = ((maxHeight - minHeight) * foamSize + minHeight);
    float width  = ((maxWidth  - minWidth)  * foamSize + minWidth);

    float x = centerX - width / 2;
    float y = centerY - height / 2;

    float alpha  = MIN(1.0, ((1.0 - 0.7) * foamSize + 0.7));

    @autoreleasepool {

        [UIView animateWithDuration:1.0
                              delay:0.0
                            options: UIViewAnimationOptionCurveLinear
                         animations:^{
                             imageViewFoam.frame = CGRectMake(x, y, width, height);
                             imageViewFoam.alpha = alpha;
                         }
                         completion:^(BOOL finished){
                         }];
    }

}

如果我注释掉这个动画,则会在ios 4中接收触摸事件。动画适用于所有iOS,并占据屏幕的一小部分(即不与任何按钮或开关重叠)。

为什么这个动画会干扰触摸事件?

更新

如果我将图像更改移动到animateWithDuration之外,一切正常(即在ios4中接收触摸事件)

imageViewFoam.frame = CGRectMake(x, y, width, height);
imageViewFoam.alpha = alpha;


@autoreleasepool {

    [UIView animateWithDuration:1.0
                          delay:0.0
                        options: UIViewAnimationOptionCurveLinear
                     animations:^{
                        //imageViewFoam.frame = CGRectMake(x, y, width, height);
                        //imageViewFoam.alpha = alpha;
                     }
                     completion:^(BOOL finished){
                     }];
}

更新2

动画每1秒启动一次(因此持续时间也是1秒,我的图像会相对平滑增长。它有点摇摆,但这就是我想要的效果)。

在任何情况下,如果我将持续时间更改为0.5秒,则触摸事件在动画之间触摸时会起作用(但如果在动画期间触摸它们则不会)。

因此,似乎虽然animationWithDuration实际上是动画的东西,但iOS4中会忽略触摸事件。

1 个答案:

答案 0 :(得分:3)

我添加了选项UIViewAnimationOptionAllowUserInteraction

@autoreleasepool {

    [UIView animateWithDuration:1.0
                          delay:0.0
                        options:(UIViewAnimationOptionCurveLinear | UIViewAnimationOptionAllowUserInteraction)
                     animations:^{
                        imageViewFoam.frame = CGRectMake(x, y, width, height);
                        imageViewFoam.alpha = alpha;
                     }
                     completion:^(BOOL finished){
                     }];
}

感谢mmc的回答here

根据Apple docs,动画应该只禁用imageViewFoam的用户交互

  

在动画期间,暂时禁用用户交互   动画中涉及的所有视图,无论其中的值如何   属性。您可以通过指定禁用此行为   配置时的UIViewAnimationOptionAllowUserInteraction选项   动画。

所以我不确定为什么事情不起作用。在任何  案例,添加选项解决了我的问题。