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 では無視されるようです。