this例です。UIViewフレームをアニメーション化すると、サブビューUIScrollViewが必ずアニメーション化されるとは限りません
私は、TabBarControllerをアニメーション化するときに(フルスクリーン効果のために)、PhotoViewerViewControllerのフレームをアニメートしています。 PhotoViewerはuiscrollviewを使用して、Appleの写真アプリと同じ種類の効果を生成します。何らかの理由で、時にはそれは私のPhotoViewerフレームと一緒にアニメートし、時にはそれはしません。
最初の例では、フレームサイズを大きくするとジャンプしますが、フレームサイズを小さくして(タブバーを元に戻す)きれいにアニメートします。
しかし、thisの例では、写真が垂直の場合、両方向にジャンプします。
どちらの場合も、スクロールビューで写真を拡大すると、両方向で正しくアニメーション表示されます。
私はそこに証拠があると知っていますが、ここで何が起こっているのか私の指を置くことはできません。 SO上のポストから適応
void (^updateProperties) (void) =^{
self.navigationController.navigationBar.alpha = hidden ? 0.0f : 1.0f;
self.navigationController.toolbar.alpha = hidden ? 0.0f : 1.0f;
if (self.tabBarController) {
int height = self.tabBarController.tabBar.bounds.size.height;
for(UIView *view in self.tabBarController.view.subviews)
{
int newHeight;
UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
if (UIInterfaceOrientationIsPortrait(orientation)) {
newHeight = hidden ? [[UIScreen mainScreen] bounds].size.height : [[UIScreen mainScreen] bounds].size.height - height;
} else {
newHeight = hidden ? [[UIScreen mainScreen] bounds].size.width : [[UIScreen mainScreen] bounds].size.width - height;
}
if([view isKindOfClass:[UITabBar class]])
{
[view setFrame:CGRectMake(view.frame.origin.x, newHeight, view.frame.size.width, view.frame.size.height)];
}
else
{
CGRect newFrame = CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, newHeight);
[view setFrame:newFrame];
// update our VC frame with animation
[self.view setFrame:newFrame];
}
}
}
};
完全なソース
は、ここに私のアニメーションブロックです。
ありがとうございます。後者はうまくいきませんでしたが、私は前者と一緒に行きます。 –
私はまだそれを解決していないが、私はあなたが正しい方向に私を指摘したと思う。この特定の変換がPhotoImageView自体、またはそれを含むスクロールでトリガされているかどうかはわかりません。 –
個人的には、スクロールビューの内容をスクロールビューのサブクラス自体にセンタリングするためのすべてのロジックを移動します。ここでは、-setContentOffset:をオーバーライドして、ズームデリゲートメソッドを使用するのではなくレイアウトを実行できます。 – hatfinch