2

是否可以获得内置 iOS 系统动画的动画属性(速度和缓动曲线)?具体来说,UIStatusBarAnimationSlide当您隐藏或显示状态栏时。现在我只是在观察它并想出了一个很好的匹配:使用默认动画曲线的 0.35 秒。这很好用,但 Apple 可能会在未来的 iOS 更新中更改这样的动画,并且完全匹配它而不依赖于我自己提出的硬编码值会很好。

对于它的价值,这是我的视图控制器在我点击视图以隐藏状态栏并调整视图大小以填充屏幕时调用的方法。

-(void)tappedView:(UIGestureRecognizer *)gestureRecognizer
{
    UIApplication *app = [UIApplication sharedApplication];
    // First, toggle the visibility of the status bar
    [[UIApplication sharedApplication] setStatusBarHidden:![app isStatusBarHidden] withAnimation:UIStatusBarAnimationSlide];
    // Then scale this view controller's view, attempting to match the built-in
    // UIStatusBarAnimationSlide animation
    [UIView animateWithDuration:.35
            animations:^{
                self.view.frame = [UIScreen mainScreen].applicationFrame;
            }];
}

顺便说一句,我很惊讶我找不到在隐藏状态栏时处理调整 VC 视图大小的内置方法。毕竟,如果在通话过程中状态栏的高度加倍,视图会自动调整大小。告诉我我遗漏了一些东西,还有一种方法可以让视图自动增长

4

1 回答 1

1

这是我在我的应用程序中使用的一段代码:

- (void)application:(UIApplication *)application willChangeStatusBarFrame:
    (CGRect)oldStatusBarFrame {
    [UIView animateWithDuration:0.355f animations:^{
        if(floating_point_values_are_equal(oldStatusBarFrame.size.height, 20.0f)) {
            for(UIViewController* VC in self.tabBarController.viewControllers) {
                UIView* view = VC.view;
                [view setTransform:CGAffineTransformMakeScale(1.0f, 1.0f)];
            }
        } else {
            for(UIViewController* VC in self.tabBarController.viewControllers) {
                UIView* view = VC.view;
                CGFloat ratio = (view.frame.size.height - 20) / view.frame.size.height;

                [view setTransform:CGAffineTransformMakeScale(1.0f, ratio)];
            }
        }
    }];
}

它基本上根据新的屏幕尺寸缩放整个应用程序。它之所以有效,是因为比例不是很大的变化——为新的 iPhone 屏幕这样做看起来不正确。

于 2012-10-03T00:58:57.330 回答