gpt4 book ai didi

iphone - 当工具栏或导航栏在屏幕上或屏幕外显示动画时,平滑地调整导航 View 的大小

转载 作者:行者123 更新时间:2023-11-28 22:28:48 28 4
gpt4 key购买 nike

我在屏幕上和屏幕外为 UINavigationController 导航栏和工具栏制作动画。这按预期工作 - 但它们之间包含的 View 不会平滑地改变大小。

条形图按其应有的动画打开和关闭,但它们之间的导航 View 从缩小尺寸(当两个条形图都可见时)跳到全屏尺寸(当它们隐藏时)。

纯属猜测,我试过这个:

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1.0];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];

[[self navigationController] setNavigationBarHidden:YES animated:YES];
[[self navigationController] setToolbarHidden:YES];

[UIView commitAnimations];

...但这没有任何区别。

有没有办法让导航 View 平滑地改变大小?

我可以通过使用animated:NO 来解决这个问题,这样一切 都会跳动,但是那看起来很难看。

提前致谢。

最佳答案

我为创建平滑的 View 过渡所做的工作:

1) 在 Interface Builder 中,基本上位于导航栏和工具栏之间的 View 不应自动调整其内容(例如图片)的大小,因此我取消选中 Autoresize Subviews 标志

2) 然后为隐藏/取消隐藏事件创建以下触摸处理程序。关键点是使用

[UIView transitionWithView:self.view 
duration:UINavigationControllerHideShowBarDuration
options:UIViewAnimationOptionCurveLinear
animations:^
{
/* Put other animation code here ;) */
}];

为内置隐藏/取消隐藏动画添加额外动画的代码片段。

最初我尝试了简单的方法:隐藏/取消隐藏两个栏并让 iOS 调整内部 View 的大小。结果(在模拟器上)令人失望,并不顺利。如果我只隐藏一个栏,则 View 大小调整效果很好,但代码中有两个栏时效果不佳。

所以这里是完整的 touchedBegun 事件处理程序,它起到了作用:

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

AppDelegate *app = (AppDelegate*) [[UIApplication sharedApplication] delegate];
if (blVisible) {
[app.navigationController setToolbarHidden:YES animated:YES];
[app.navigationController setNavigationBarHidden:YES animated:YES];

[UIView transitionWithView:self.view
duration:UINavigationControllerHideShowBarDuration
options:UIViewAnimationOptionCurveLinear
animations:^
{
/* Put other animation code here ;) */
self.img.frame = CGRectMake(0, 0, 320, 480);
}
completion:^(BOOL finished)
{
}];


} else {
[app.navigationController setToolbarHidden:NO animated:YES];
[app.navigationController setNavigationBarHidden:NO animated:YES];

[UIView transitionWithView:self.view
duration:UINavigationControllerHideShowBarDuration
options:UIViewAnimationOptionCurveLinear
animations:^
{
/* Put other animation code here ;) */
self.img.frame = CGRectMake(0, 0, 320, 387);
}
completion:^(BOOL finished)
{
}];

}
blVisible = !blVisible;
}

一个小评论:现在很顺利,但在模拟器中我看到的是 iOS 以某种方式隐藏/取消隐藏两个不同步的栏,因此 View 调整大小的时间不准确。请也检查设备。

如果你想要更完美的解决方案,我认为你必须自己实现这些栏以完全控制它们的隐藏/取消隐藏效果......

关于iphone - 当工具栏或导航栏在屏幕上或屏幕外显示动画时,平滑地调整导航 View 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18090990/

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