gpt4 book ai didi

objective-c - 动画 UIView 框架, subview UIScrollView 并不总是动画

转载 作者:可可西里 更新时间:2023-11-01 03:53:01 25 4
gpt4 key购买 nike

this示例。

当我对 tabBarController 进行动画处理时(为了全屏效果),我正在对 PhotoViewerViewController 的框架进行动画处理。 PhotoViewer 使用 uiscrollview 来生成与 Apple 的照片应用程序相同的效果。无论出于何种原因,它有时会与我的 PhotoViewer 框架一起动画,有时则不会。

您可以在第一个示例中看到它在增加帧大小时跳转,但在减小帧大小时(并恢复标签栏)时动画效果很好。

然而在this例如,当照片是垂直的时,它会在两个方向上跳跃。

在这两种情况下,如果我使用 ScrollView 放大照片,它会在两个方向上正确地显示动画。

我知道那里有证据,但我无法确定这里发生了什么。

这是我的动画 block :

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];

}

}
}

};

代码改编自 SO 上的帖子:UITabBar wont hide

github 上的完整源代码.

最佳答案

一般来说,如果动画有时工作有时不工作,那是因为在后一种情况下,延迟执行导致通过将相关属性设置为其最终值来有效取消动画。

UIScrollView 的特殊情况下,通常会在动画 block 关闭后调用一个没有动画的运行循环调用 -layoutSubviews。出于这个原因,我通常会尽量避免在 View 层次结构中有 UIScrollView 的方法中进行任何布局(因为特别是在 iOS 5 之前,UIScrollView 确实会触发 -很高兴将自己设置为需要布局)。

我建议从 -layoutSubviews 中删除对 -[EGOPhotoImageView layoutScrollViewAnimated:] 的调用,并将其添加到覆盖的 -setFrame: .

如果您可以针对 iOS4 及更高版本,也可以查看 UIViewAnimationOptionLayoutSubviews。使用基于 block 的动画并将其作为一个选项可能会在不更改任何其他内容的情况下工作。

关于objective-c - 动画 UIView 框架, subview UIScrollView 并不总是动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6647747/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com