我在屏幕上和屏幕外设置UINavigationController导航栏和工具栏的动画。这可以按预期工作 - 但它们之间包含的视图不会平滑地改变大小。
条形图按照应有的方式设置动画,但它们之间的导航视图从缩小的尺寸(当两个条形可见时)跳到全屏尺寸(当它们被隐藏时)。
纯粹是猜测,我试过这个:
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1.0];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[[self navigationController] setNavigationBarHidden:YES animated:YES];
[[self navigationController] setToolbarHidden:YES];
[UIView commitAnimations];
......但它没有任何区别。
有没有办法让导航视图顺畅地改变大小?
我可以使用animated:NO
解决问题,以便所有内容跳转,但这看起来很难看。
提前致谢。
答案 0 :(得分:2)
我做了什么来创建平滑的视图转换:
1)在Interface Builder中,基本上在导航栏和工具栏之间的视图不应自动调整其内容的大小(例如图片),因此我取消了自动调整大小的子视图标记
2)然后为hide / unhide事件创建了以下触摸处理程序。关键是使用
[UIView transitionWithView:self.view
duration:UINavigationControllerHideShowBarDuration
options:UIViewAnimationOptionCurveLinear
animations:^
{
/* Put other animation code here ;) */
}];
为内置隐藏/取消隐藏动画添加额外动画的代码段。
最初我尝试过简单:隐藏/取消隐藏两个栏并让iOS调整内部视图的大小。结果(在模拟器上)是令人失望的,它并不顺利。如果我只隐藏了一个条形图,它可以很好地调整视图大小,但代码中没有两个条形图。
所以这里是完整的touchBegun事件处理程序,它可以解决这个问题:
- (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;
}
一个小评论:它现在很流畅,但在Simulator中我看到的是iOS以某种方式隐藏/取消隐藏两个不同步的条形,因此视图调整大小并不是完美的时间。请检查设备。
如果你想要更完美的解决方案,我认为你必须为你自己实施吧,以完全控制它们的隐藏/不隐藏效果...
答案 1 :(得分:0)
在该动画块中,您可以尝试将中间视图的框架设置为隐藏条形图后的框架。这应该使过渡顺利。