在升级到 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 中触摸事件被忽略了。