次のアニメーションを使用しました。開始位置だけでなく意図した最終位置にも境界線を付けて、ビューの望ましくないシフト (明らかな上向きの拡大以外) が発生したかどうかを確認できるようにしましたが、 iOS 4.2.1:
[UIView animateWithDuration:2.0
animations:^{
CGRect newImageFrame = imageView.frame;
newImageFrame.origin.y -= stretchBy;
newImageFrame.size.height += stretchBy;
imageView.frame = newImageFrame;
}];
私は iOS 4.1 デバイスを持っていません (私の古い 3G テスト電話は、そのデバイスでサポートされている最新の iOS バージョンである iOS 4.2.1 を実行しています)、それについて話すことはできませんが、iOS 4.2.1 では問題ありません.
ただし、フレームの変化をアニメートするときに、最終フレームが指定したとおりに正確に表示されない可能性はほとんどないことを告白しなければなりません。終了時にフレームを作成した場合NSLog
、それは正しい値ではありませんか? それとも、アニメーション中に一瞬動いたが、その後正しい位置に収まったということですか? または、アニメーション中にシフトダウンし、アニメーションが完了しても間違った位置になってしまうことはありますか?
何か他のことが起こっているのだろうか (たとえば、アニメーション ビューはスクロール ビューのサブビューであり、それ自体が移動している可能性がありますか? または、アニメーションの後に誤ってフレームをさらに調整しているコードがここに示されていませんか? など)。フレームが実際に意図したものではないかどうか、または他の問題が発生しているかどうかを確認する必要があるようです。
私はもともとオプションを提案すると答えshouldRasterize
ましたが、古い iPhone 3G デバイスをサポートしようとしているのであれば、それでは十分ではないかもしれません。これらの古い電話では、間違いなく少し吃音があります。とにかく、これは私の最初の答えでした:
layer
シャドウ機能は CPU を少し集中的に使用するため、これを行っていると思います。shouldRasterize
しかし、オプションを使用すると、少し良くなると聞いたことがあります (ただし、話すことはできません) 。
viewThatNeedsShadow.layer.shadowColor = [UIColor blackColor].CGColor;
viewThatNeedsShadow.layer.shadowOffset = CGSizeMake(3.0, 3.0);
viewThatNeedsShadow.layer.shadowOpacity = 0.5;
viewThatNeedsShadow.layer.shouldRasterize = YES;
viewThatNeedsShadow.clipsToBounds = NO;