M13InfiniteTabBar 是对 UITabBar 的一种优雅替代。当你有超过五个需要以平等次数进行访问的视图控制器时,UITabBar 就会成为一个问题。将任何标签隐藏在“更多”标签下没有意义,因为这需要额外的两个点击才能到达这些视图控制器。M13InfiniteTabBar 通过将所有视图控制器放在单一级别上解决此问题。可以通过左右滑动标签栏来访问“额外”视图控制器。虽然滑动可能存在一个问题,那就是我的离屏标签在哪个方向?M13InfiniteTabBar 通过将标签放置在一个无限滚动循环中解决这个问题。任何标签都可以通过任何方向的滑动来访问。除了这些之外,M13InfiniteTabBar 还有一些 UITabBar 不提供的其他功能。
点击切换标签
无限滚动
代理方法(防止标签选择)
引导用户注意力
旋转
固定在顶部
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 *viewController = [[M13InfiniteTabBarController alloc] initWithViewControllers:@[vc1, vc2, vc3, vc4, vc5] pairedWithInfiniteTabBarItems:@[item1, item2, item3, item4, item5]];
在初始化之后,可以自定义 M13InfiniteTabBar 的其他任何属性。
为了能够吸引用户的注意力,设置需要用户注意力的背景视图。这项功能被分离出来,以便于进行子类化和自定义设计。
viewController.requiresAttentionBackgroundView = [[PulsingRequiresAttentionView alloc] init];
这些特性最终将被添加到 M13InfiniteTabBar。
如果您有任何问题、评论或建议,请给我发消息。如果您发现错误或想要提交 pull 请求,请让我知道。
MIT 许可证
版权所有 (c) 2014 Brandon McQuilkin
在此特此许可任何获得本软件及其相关文档文件(以下简称)
"软件"的人,无需任何费用,可以在不受限制的情况下使用软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件的副本,并允许向提供软件的人提供软件以供其使用,前提是
以下条件上述版权声明和本许可声明应包含在所有副本或软件 主要部分中。
软件按“原样”提供,不提供任何形式的质量保证,明示或暗示的保证,包括但不限于适销性、特定用途适合性和非侵权性保证。在任何情况下,作者或版权所有者均不对因使用、本软件或使用其他任何方式而产生的任何索赔、损害或其他责任承担责任,无论这些索赔是基于合同、侵权行为或其他责任。