YPTabBar.h 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. //
  2. // YPTabBar.h
  3. // YPTabBarController
  4. //
  5. // Created by 喻平 on 15/8/11.
  6. // Copyright (c) 2015年 YPTabBarController. All rights reserved.
  7. //
  8. #import <UIKit/UIKit.h>
  9. #import "YPTabItem.h"
  10. @class YPTabBar;
  11. @protocol YPTabBarDelegate <NSObject>
  12. @optional
  13. - (BOOL)yp_tabBar:(YPTabBar *)tabBar willSelectItemAtIndex:(NSInteger)index;
  14. - (void)yp_tabBar:(YPTabBar *)tabBar didSelectedItemAtIndex:(NSInteger)index;
  15. @end
  16. @interface YPTabBar : UIView <UIScrollViewDelegate>
  17. @property (nonatomic, copy) NSArray<YPTabItem *> *items; // TabItems
  18. // 设置item选中背景
  19. @property (nonatomic, strong) UIColor *itemSelectedBgColor;
  20. @property (nonatomic, strong) UIImage *itemSelectedBgImage;
  21. @property (nonatomic, assign) CGFloat itemSelectedBgCornerRadius;
  22. @property (nonatomic, assign) CGFloat leftAndRightSpacing; // TabBar边缘与第一个和最后一个item的距离
  23. @property (nonatomic, strong) UIColor *itemTitleColor; // 标题颜色
  24. @property (nonatomic, strong) UIColor *itemTitleSelectedColor; // 选中时标题的颜色
  25. @property (nonatomic, strong) UIFont *itemTitleFont; // 标题字体
  26. @property (nonatomic, strong) UIFont *itemTitleSelectedFont; // 选中时标题的字体
  27. @property (nonatomic, strong) UIColor *badgeBackgroundColor; // Badge背景颜色
  28. @property (nonatomic, strong) UIImage *badgeBackgroundImage; // Badge背景图像
  29. @property (nonatomic, strong) UIColor *badgeTitleColor; // Badge标题颜色
  30. @property (nonatomic, strong) UIFont *badgeTitleFont; // Badge标题字体
  31. @property (nonatomic, assign) NSInteger selectedItemIndex; // 选中某一个item
  32. /**
  33. * 拖动内容视图时,item的颜色是否根据拖动位置显示渐变效果,默认为YES
  34. */
  35. @property (nonatomic, assign, getter = isItemColorChangeFollowContentScroll) BOOL itemColorChangeFollowContentScroll;
  36. /**
  37. * 拖动内容视图时,item的字体是否根据拖动位置显示渐变效果,默认为NO
  38. */
  39. @property (nonatomic, assign, getter = isItemFontChangeFollowContentScroll) BOOL itemFontChangeFollowContentScroll;
  40. /**
  41. * TabItem的选中背景是否随contentView滑动而移动
  42. */
  43. @property (nonatomic, assign, getter = isItemSelectedBgScrollFollowContent) BOOL itemSelectedBgScrollFollowContent;
  44. /**
  45. * 将Image和Title设置为水平居中,默认为YES
  46. */
  47. @property (nonatomic, assign, getter = isItemContentHorizontalCenter) BOOL itemContentHorizontalCenter;
  48. @property (nonatomic, weak) id<YPTabBarDelegate> delegate;
  49. /**
  50. * 返回已选中的item
  51. */
  52. - (YPTabItem *)selectedItem;
  53. /**
  54. * 根据titles创建item
  55. */
  56. - (void)setTitles:(NSArray <NSString *> *)titles;
  57. /**
  58. * 设置tabItem的选中背景,这个背景可以是一个横条
  59. *
  60. * @param insets 选中背景的insets
  61. * @param animated 点击item进行背景切换的时候,是否支持动画
  62. */
  63. - (void)setItemSelectedBgInsets:(UIEdgeInsets)insets tapSwitchAnimated:(BOOL)animated;
  64. /**
  65. * 设置tabBar可以左右滑动
  66. * 此方法与setScrollEnabledAndItemFitTextWidthWithSpacing这个方法是两种模式,哪个后调用哪个生效
  67. *
  68. * @param width 每个tabItem的宽度
  69. */
  70. - (void)setScrollEnabledAndItemWidth:(CGFloat)width;
  71. /**
  72. * 设置tabBar可以左右滑动,并且item的宽度根据标题的宽度来匹配
  73. * 此方法与setScrollEnabledAndItemWidth这个方法是两种模式,哪个后调用哪个生效
  74. *
  75. * @param spacing item的宽度 = 文字宽度 + spacing
  76. */
  77. - (void)setScrollEnabledAndItemFitTextWidthWithSpacing:(CGFloat)spacing;
  78. /**
  79. * 将tabItem的image和title设置为居中,并且调整其在竖直方向的位置
  80. *
  81. * @param verticalOffset 竖直方向的偏移量
  82. * @param spacing image和title的距离
  83. */
  84. - (void)setItemContentHorizontalCenterWithVerticalOffset:(CGFloat)verticalOffset
  85. spacing:(CGFloat)spacing;
  86. /**
  87. * 设置数字Badge的位置与大小
  88. *
  89. * @param marginTop 与TabItem顶部的距离
  90. * @param centerMarginRight badge的中心与TabItem右侧的距离
  91. * @param titleHorizonalSpace Badge的标题水平方向的空间
  92. * @param titleVerticalSpace Badge的标题竖直方向的空间
  93. */
  94. - (void)setNumberBadgeMarginTop:(CGFloat)marginTop
  95. centerMarginRight:(CGFloat)centerMarginRight
  96. titleHorizonalSpace:(CGFloat)titleHorizonalSpace
  97. titleVerticalSpace:(CGFloat)titleVerticalSpace;
  98. /**
  99. * 设置小圆点Badge的位置与大小
  100. *
  101. * @param marginTop 与TabItem顶部的距离
  102. * @param centerMarginRight badge的中心与TabItem右侧的距离
  103. * @param sideLength 小圆点的边长
  104. */
  105. - (void)setDotBadgeMarginTop:(CGFloat)marginTop
  106. centerMarginRight:(CGFloat)centerMarginRight
  107. sideLength:(CGFloat)sideLength;
  108. /**
  109. * 设置分割线
  110. *
  111. * @param itemSeparatorColor 分割线颜色
  112. * @param width 宽度
  113. * @param marginTop 与tabbar顶部距离
  114. * @param marginBottom 与tabbar底部距离
  115. */
  116. - (void)setItemSeparatorColor:(UIColor *)itemSeparatorColor
  117. width:(CGFloat)width
  118. marginTop:(CGFloat)marginTop
  119. marginBottom:(CGFloat)marginBottom;
  120. - (void)setItemSeparatorColor:(UIColor *)itemSeparatorColor
  121. marginTop:(CGFloat)marginTop
  122. marginBottom:(CGFloat)marginBottom;
  123. @end