iOS7 侧边菜单状态栏颜色过渡。就像在 iOS7 Facebook 应用程序中一样

2024-04-14

iOS7 Facebook 应用程序有一个右侧菜单,可以通过从右向左滑动或单击右上角的按钮来显示。打开此菜单时,会出现颜色过渡在整个关闭时状态栏从蓝色变为黑色,反之亦然。

此图像并排显示两个状态栏 https://i.stack.imgur.com/B6quS.jpg

对于带有侧边菜单的 iOS 应用程序来说,这看起来是一个非常好的解决方案。

关于如何实现这一目标有什么想法或方法吗?

我目前正在使用JA侧面板 https://github.com/gotosleep/JASidePanels。 谢谢!


我设法找到了一种非常简单、优雅的方法来做到这一点,它完美地模仿了 Facebook 应用程序的功能。

这是我的方法:

  • 创建带有状态栏框架的视图
  • 将视图背景颜色设置为黑色,不透明度设置为 0
  • 将视图作为子视图添加到任何根视图(您需要一个覆盖中心视图和菜单的视图,这样它就不会局限于任何单个视图 - 一个不错的选择是菜单控制器实现使用的容器视图控制器)
  • 在菜单控制器实现的菜单动画方法中设置视图的不透明度

这是我的具体实现,使用MMD抽屉控制器 https://github.com/mutualmobile/MMDrawerController:

我对 MMDrawerController 进行了子类化(实际上我已经有一个子类用于使用带故事板的 MMDrawerController https://github.com/mutualmobile/MMDrawerController/issues/74),并将此代码添加到类的init method:

// Setup view behind status bar for fading during menu drawer animations
if (OSVersionIsAtLeastiOS7()) {
    self.statusBarView = [[UIView alloc] initWithFrame:[[UIApplication sharedApplication] statusBarFrame]];
    [self.statusBarView setBackgroundColor:[UIColor blackColor]];
    [self.statusBarView setAlpha:0.0];
    [self.view addSubview:self.statusBarView];
}

// Setup drawer animations
__weak __typeof(&*self) weakSelf = self; // Capture self weakly

[self setDrawerVisualStateBlock:^(MMDrawerController *drawerController, MMDrawerSide drawerSide, CGFloat percentVisible) {
    MMDrawerControllerDrawerVisualStateBlock block;
    block = (drawerSide == MMDrawerSideLeft) ? [MMDrawerVisualState parallaxVisualStateBlockWithParallaxFactor:15.0] : nil; // Right side animation : Left side animation
    if(block){
        block(drawerController, drawerSide, percentVisible);
    }
    [weakSelf.statusBarView setAlpha:percentVisible];    // THIS IS THE RELEVANT CODE
}];

我还添加了self.statusBarView作为私有财产。

  • 代码的第一部分创建一个视图,配置它,并将其添加为 MMDrawerController 子类视图的子视图。这OSVersionIsAtLeastiOS7()方法是一种自定义方法,可简化检查设备是否正在运行 iOS 7(如果不是,您的自定义视图将显示在状态栏下方,这是您不希望看到的)。

  • 第二段代码是MMDrawerController的setDrawerVisualStateBlock方法,设置打开和关闭菜单时要执行的动画代码。前几行代码是样板代码,它将预构建的动画块之一设置到每个菜单(我想要左侧有视差,但右侧没有视差)。相关代码是该块的最后一行:[weakSelf.statusBarView setAlpha:percentVisible];,它设置状态栏视图的不透明度以匹配菜单当前打开的百分比。这允许您在 Facebook 应用程序中看到流畅的交叉动画。你还会注意到我已经分配了self到一个变量weakSelf,从而避免“保留循环”编译器警告。

这是我使用 MMDrawerController 和子类的具体方法,我这样做更多是为了方便,因为我已经有了子类,而不是因为它必然是最好的方法或唯一的方法。它可能可以通过其他几种方式实现,使用没有子类的 MMDrawerController,或使用任何其他侧抽屉菜单实现。

最终结果是状态栏后面的动画平滑淡入黑色,正如您在新的 Facebook 应用程序中看到的那样。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS7 侧边菜单状态栏颜色过渡。就像在 iOS7 Facebook 应用程序中一样 的相关文章

随机推荐

  • 在 R 的另一个函数中使用 data.table

    使用列创建新变量时 data table 不允许带引号的列名称 当在函数中使用 data table 时 这会产生以下问题 library data table dt lt data table var1 c 1 10 var2 seq 2
  • TypeORM 为什么我的关系列未定义?外键未定义

    我只是使用 TypeORM 并发现关系列未定义 Entity name person export class Person PrimaryGeneratedColumn uuid id string OneToOne gt User Jo
  • 深层嵌套类型的Elasticsearch聚合

    之前我问过this https stackoverflow com questions 31841542 elasticsearch metric aggregation number of elements in array 318464
  • 等待循环结束

    有没有办法在运行下一个函数之前确保 for 循环已完成 我有一个场景 向用户显示一个用户列表 他们可以选择 X 个用户 一旦他们为所选的每个用户按下 完成 我就会调用 REST API 服务来获取有关的更多信息要添加到 用户 数组中的选定用
  • 枚举是引用类型还是值类型?

    我在我的中使用了 Enum 属性实体框架 http msdn microsoft com en US data ef5级 但在数据库中该字段可以为空 Visual Studio 给出错误 指出该属性必须是可为 null 的属性 我的问题是
  • 为什么我们需要指定标准的 Lark 词法分析器才能捕获评论终端?

    我正在开发一个基于 Lark 的项目 我需要能够 捕获 正在解析的代码中的注释 但是 当使用标准词法分析器而不明确指定标准词法分析器时 它不起作用 我采取了第二个例子云雀食谱 https lark parser readthedocs io
  • ar-sa 文化的预期日期时间字符串是什么?

    我有一个方法 DateToString DateTime datetime string format CultureInfo cultrueInfo return datetime ToString format cultureInfo
  • 更改旋转箭头,Appcompat v21

    i have activities which i themed with my custom theme but for spinner i choosed to style it with Appcompat v21 but i got
  • 是否有适用于 Microsoft Edge 浏览器的 Selenium WebDriver?

    截至本文发布之日 Microsoft Edge 这个名称刚刚被正式宣布为新 Windows 10 的默认浏览器 现在问这个问题可能还为时过早 但我想知道是否有新的 Selenium WebDriver 可用 如果没有 是否有任何说明我们可能
  • 计算分数的Java程序

    该程序的目的是获取一个分数的两个用户输入 从用户接收一个运算符 然后获取第二个分数的另外两个用户输入 该程序必须检查两个分数中使用的数字是否在 0 99 之间 并且分母非零 该程序还必须确保用户输入有效的运算符 我现在面临的唯一问题是我的变
  • 是否有可以在 form_div_layout.html.twig 中使用的变量的完整列表?

    我想获取Symfony表单主题文件form div layout html twig中可用的所有变量 我阅读了Symfony官方文档并在网上搜索 但找不到任何有用的信息 有人可以帮助我吗 那么 您可以通过迭代上下文来获取每个块中的所有可用变
  • 相同视图和浏览器版本中不同的 IE XML/XSL 行为,但使用不同的域用户帐户

    我们的一位用户在尝试访问我们的 Web 应用程序视图之一时遇到问题 IE9 行为在 6 8 和 9 中显得一致 但在域帐户之间不一致 对于该特定用户的 Windows 域帐户 无论使用哪些凭据来访问我们的应用程序 或者使用哪台机器的浏览器
  • 在 init 上创建 django 表单

    如何在表单初始化函数中添加字段 例如在下面的代码中我想添加一个配置文件字段 class StaffForm forms ModelForm def init self user args kwargs if user pk 1 self f
  • DocumentDb IN 子句中的最大项目数

    我在文档中找不到任何地方提及 DocumentDb 中 IN 关键字支持的最大项目数 我会假设有一个限制 任何人都可以在引用的文档中指出吗 DocumentDB 实际上消除了所有限制 将其提高到我们预计用户无法超越的水平 因此不再记录它们
  • 将 Team Foundation Server (TFS) 与 Xcode 连接

    我是 Xcode 和 TFS 的新手 有人可以解释一下如何将 TFS 2013 与 Xcode 连接来维护存储库 或者给我一个从一开始就包含完整详细信息的链接吗 这个想法是使用 Git 作为版本控制 并将更改推送到 TFS 中托管的中央存储
  • 将 pandas 中的句子拆分为句子编号和单词

    我有一个像这样的熊猫数据框 Text start end entity value I love apple 7 11 fruit apple I ate potato 6 11 vegetable potato 我尝试过使用 for 循环
  • 如何在 C# 中将 DataRowView 转换为 DataRow

    我想使用拖放 但我不知道如何将信息从 DataGridView 控件拖动到 DataGridView 或 ListBox 我有一个链接http www codeproject com KB cpp DataGridView Drag n D
  • 如何取消引用作为空接口传递的指针值?

    我有一个方法target interface 在我用于数据库访问的类型上 例如 func c client Query query someType target interface error return c db Query quer
  • 从 SQLAlchemy 中的时间戳选择日期

    我将 SQLAlchemy 与 python 一起使用 我想从列类型时间戳中选择日期 以执行此查询 SELECT DATE record date FROM Users 我通过 sql alchemy 编写了这段代码 但它将返回时间戳 se
  • iOS7 侧边菜单状态栏颜色过渡。就像在 iOS7 Facebook 应用程序中一样

    iOS7 Facebook 应用程序有一个右侧菜单 可以通过从右向左滑动或单击右上角的按钮来显示 打开此菜单时 会出现颜色过渡在整个关闭时状态栏从蓝色变为黑色 反之亦然 此图像并排显示两个状态栏 https i stack imgur co