是否可以访问iOS系统动画的属性?

时间:2012-10-03 00:55:29

标签: ios animation uikit

是否可以获取内置iOS系统动画的动画属性(速度和缓动曲线)?具体来说,隐藏或显示状态栏时UIStatusBarAnimationSlide。现在我只是注视它并且提出了一个很好的匹配:.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视图的大小。毕竟,如果状态栏在呼叫进行时其高度加倍,则视图会自动调整大小。告诉我,我错过了一些东西,并且有办法让视图自动成长

1 个答案:

答案 0 :(得分: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屏幕看起来不太合适。