M13InfiniteTabBar 2.3.2

M13InfiniteTabBar 2.3.2

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布最后发布2014年12月

Brandon McQuilkin 维护。



  • Brandon McQuilkin

M13InfiniteTabBar 是对 UITabBar 的一种优雅替代。当你有超过五个需要以平等次数进行访问的视图控制器时,UITabBar 就会成为一个问题。将任何标签隐藏在“更多”标签下没有意义,因为这需要额外的两个点击才能到达这些视图控制器。M13InfiniteTabBar 通过将所有视图控制器放在单一级别上解决此问题。可以通过左右滑动标签栏来访问“额外”视图控制器。虽然滑动可能存在一个问题,那就是我的离屏标签在哪个方向?M13InfiniteTabBar 通过将标签放置在一个无限滚动循环中解决这个问题。任何标签都可以通过任何方向的滑动来访问。除了这些之外,M13InfiniteTabBar 还有一些 UITabBar 不提供的其他功能。

功能

  • 简单设置;可以通过单个初始化方法进行程序化设置,该方法传递要显示的 UIViewControllers 及其标签。或者,如果使用 storyboards,则通过单个代理方法。
  • 所有颜色和图标都可以自定义以匹配任何应用程序主题。大多数属性遵循 UIAppearance 协议。
  • 所有代理方法都像 UITabBarControllerDelegate 方法一样工作。允许轻松实现代理。
  • 以独特的方式处理设备旋转。标签栏始终固定在屏幕顶部或底部。当设备旋转时,视图控制器和标签栏图标将旋转到新方向,标签栏保持在位置锁定。每个视图控制器都可以单独处理旋转。每个视图控制器都可以有自己的允许的方向集合;与 UITabBarController 不同,视图控制器要么必须允许所有方向,要么只能使用一个方向。
  • 允许用户注意力集中到特定的标签上,如果某个标签需要用户注意,则标签颜色会改变,并且在屏幕之外时,标签栏将显示动画以引导用户滚动到该标签。
  • 如果标签栏包含的标签超出了屏幕能显示的数量(iPhone 为 5,iPad 为 14),则标签栏将无限滚动。如果所有标签都可以在屏幕上显示,则将像普通标签栏一样操作。
  • 也可以关闭无限滚动。标签栏将只显示一组标签,并且仍然可以滚动,但将存在滚动边界。

点击切换标签

无限滚动

代理方法(防止标签选择)

引导用户注意力

旋转

固定在顶部

旋转处理

M13InfiniteTabBarController 处理所有子视图控制器的旋转。M13InfiniteTabBarController 本身被锁定为纵向模式。它手动更改子视图控制器的 frame、bounds 和角度。在旋转之前,它会检查子视图控制器 "supportedInterfaceOrientations" 的值。与 UITabBarController 不同,每个子 UIViewController 的旋转处理是分开的。如果其中五个子控制器需要纵向模式,而其他可以随意使用,其余的四个不会被锁定为仅纵向。即使在横向模式中选择纵向视图控制器,它也会显示为纵向。

设置

  • 首先创建所有视图控制器和它们的标签。
UIViewController *vc1 = [[UIViewController alloc] init];
UIViewController *vc2 = [[UIViewController alloc] init];
UIViewController *vc3 = [[UIViewController alloc] init];
UIViewController *vc4 = [[UIViewController alloc] init];
UIViewController *vc5 = [[UIViewController alloc] init];

M13InfiteTabBarItem *item1 = [[M13InfiniteTabBarItem alloc] initWithTitle:@"Title" selectedIconMask:[UIImage imageNamed:@"image.png"] unselectedIconMask:[UIImage imageNamed:@"image.png"]];
M13InfiteTabBarItem *item2 = [[M13InfiniteTabBarItem alloc] initWithTitle:@"Title" selectedIconMask:[UIImage imageNamed:@"image.png"] unselectedIconMask:[UIImage imageNamed:@"image.png"]];
M13InfiteTabBarItem *item3 = [[M13InfiniteTabBarItem alloc] initWithTitle:@"Title" selectedIconMask:[UIImage imageNamed:@"image.png"] unselectedIconMask:[UIImage imageNamed:@"image.png"]];
M13InfiteTabBarItem *item4 = [[M13InfiniteTabBarItem alloc] initWithTitle:@"Title" selectedIconMask:[UIImage imageNamed:@"image.png"] unselectedIconMask:[UIImage imageNamed:@"image.png"]];
M13InfiteTabBarItem *item5 = [[M13InfiniteTabBarItem alloc] initWithTitle:@"Title" selectedIconMask:[UIImage imageNamed:@"image.png"] unselectedIconMask:[UIImage imageNamed:@"image.png"]];
  • 然后创建 M13InfiniteTabBarController 并设置其代理。
M13InfiniteTabBarController *viewController = [[M13InfiniteTabBarController alloc] initWithViewControllers:@[vc1, vc2, vc3, vc4, vc5] pairedWithInfiniteTabBarItems:@[item1, item2, item3, item4, item5]];
  • 在初始化之后,可以自定义 M13InfiniteTabBar 的其他任何属性。

  • 为了能够吸引用户的注意力,设置需要用户注意力的背景视图。这项功能被分离出来,以便于进行子类化和自定义设计。

viewController.requiresAttentionBackgroundView = [[PulsingRequiresAttentionView alloc] init];
  • 最后,通过将其添加到 UIWindow 中或将其推送到 UINavigationController 堆栈中来自动显示控制器。

待办事项

这些特性最终将被添加到 M13InfiniteTabBar。

  • 给标签栏项目添加徽章。
  • 允许切换标签顺序,添加和删除标签。

已知问题

  • M13InfiniteTabBar 在模拟器中似乎不起作用。我已经在实际设备上测试过,它按预期工作。主要问题有两个:选择三角形没有出现,标签栏被底部截断。我不确定是什么原因。我打算猜测它是模拟器,因为实际设备上它运行良好。

联系我

如果您有任何问题、评论或建议,请给我发消息。如果您发现错误或想要提交 pull 请求,请让我知道。

许可证

MIT 许可证

版权所有 (c) 2014 Brandon McQuilkin

在此特此许可任何获得本软件及其相关文档文件(以下简称)
"软件"的人,无需任何费用,可以在不受限制的情况下使用软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件的副本,并允许向提供软件的人提供软件以供其使用,前提是
以下条件

上述版权声明和本许可声明应包含在所有副本或软件 主要部分中。

软件按“原样”提供,不提供任何形式的质量保证,明示或暗示的保证,包括但不限于适销性、特定用途适合性和非侵权性保证。在任何情况下,作者或版权所有者均不对因使用、本软件或使用其他任何方式而产生的任何索赔、损害或其他责任承担责任,无论这些索赔是基于合同、侵权行为或其他责任。