【问题标题】:Is it possible to access properties of an iOS system animation?是否可以访问 iOS 系统动画的属性?
【发布时间】:2012-10-03 00:55:28
【问题描述】:

是否可以获得内置 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 视图大小的内置方法。毕竟,如果在通话过程中状态栏的高度加倍,视图会自动调整大小。告诉我我遗漏了什么,还有一种方法可以让视图自动增长。

【问题讨论】:

    标签: ios animation uikit


    【解决方案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 屏幕这样做看起来不对。

    【讨论】:

    • 谢谢。虽然并没有真正回答问题。但我很好奇你在哪里想出了动画长度的 0.355 秒。似乎很具体,只是通过反复试验提出来。
    • 哦。我以为您只是在寻找一种适应不断变化的状态栏的方法!实际上,我通过简单的反复试验得出了 .355 - 它到了我无法分辨的地步,所以我称之为“足够接近”。
    • 哈... .35 对我有用。我只是希望有更好的方法来做到这一点。我还希望有一种更好的方法可以使视图控制器的视图在滑出视图时自动调整以填充状态栏腾出的空间。如果没有,这似乎很奇怪,进入 iOS 已有 5 年了。
    猜你喜欢
    • 1970-01-01
    • 2012-05-07
    • 2013-10-31
    • 1970-01-01
    • 2017-05-29
    • 1970-01-01
    • 2022-11-18
    • 2013-09-16
    • 1970-01-01
    相关资源
    最近更新 更多