YBPopupMenu.h 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  1. //
  2. // YBPopupMenu.h
  3. // YBPopupMenu
  4. //
  5. // Created by lyb on 2017/5/10.
  6. // Copyright © 2017年 lyb. All rights reserved.
  7. //
  8. #import <UIKit/UIKit.h>
  9. #import "YBPopupMenuPath.h"
  10. #import "YBPopupMenuDeviceOrientationManager.h"
  11. #import "YBPopupMenuAnimationManager.h"
  12. // 过期提醒
  13. #define YBDeprecated(instead) NS_DEPRECATED(2_0, 2_0, 2_0, 2_0, instead)
  14. typedef NS_ENUM(NSInteger , YBPopupMenuType) {
  15. YBPopupMenuTypeDefault = 0,
  16. YBPopupMenuTypeDark
  17. };
  18. /**
  19. 箭头方向优先级
  20. 当控件超出屏幕时会自动调整成反方向
  21. */
  22. typedef NS_ENUM(NSInteger , YBPopupMenuPriorityDirection) {
  23. YBPopupMenuPriorityDirectionTop = 0, //Default
  24. YBPopupMenuPriorityDirectionBottom,
  25. YBPopupMenuPriorityDirectionLeft,
  26. YBPopupMenuPriorityDirectionRight,
  27. YBPopupMenuPriorityDirectionNone //不自动调整
  28. };
  29. @class YBPopupMenu;
  30. @protocol YBPopupMenuDelegate <NSObject>
  31. @optional
  32. - (void)ybPopupMenuBeganDismiss:(YBPopupMenu *)ybPopupMenu;
  33. - (void)ybPopupMenuDidDismiss:(YBPopupMenu *)ybPopupMenu;
  34. - (void)ybPopupMenuBeganShow:(YBPopupMenu *)ybPopupMenu;
  35. - (void)ybPopupMenuDidShow:(YBPopupMenu *)ybPopupMenu;
  36. /**
  37. 点击事件回调
  38. */
  39. - (void)ybPopupMenu:(YBPopupMenu *)ybPopupMenu didSelectedAtIndex:(NSInteger)index;
  40. /**
  41. 自定义cell
  42. 可以自定义cell,设置后会忽略 fontSize textColor backColor type 属性
  43. cell 的高度是根据 itemHeight 的,直接设置无效
  44. 建议cell 背景色设置为透明色,不然切的圆角显示不出来
  45. */
  46. - (UITableViewCell *)ybPopupMenu:(YBPopupMenu *)ybPopupMenu cellForRowAtIndex:(NSInteger)index;
  47. /// 自定义cell高度
  48. - (CGFloat)ybPopupMenu:(YBPopupMenu *)ybPopupMenu heightForRowAtIndex:(NSInteger)index;
  49. @end
  50. @interface YBPopupMenu : UIView
  51. //选中变色
  52. @property(nonatomic,assign)BOOL selectTextColor;
  53. //文字居中
  54. @property(nonatomic,assign)BOOL isCenter;
  55. /**
  56. 标题数组 只读属性
  57. */
  58. @property (nonatomic, strong, readonly) NSArray * titles;
  59. /**
  60. 图片数组 只读属性
  61. */
  62. @property (nonatomic, strong, readonly) NSArray * images;
  63. /**
  64. tableView Default separatorStyle is UITableViewCellSeparatorStyleNone
  65. */
  66. @property (nonatomic, strong) UITableView * tableView;
  67. /**
  68. 圆角半径 Default is 5.0
  69. */
  70. @property (nonatomic, assign) CGFloat cornerRadius;
  71. /**
  72. 自定义圆角 Default is UIRectCornerAllCorners
  73. 当自动调整方向时corner会自动转换至镜像方向
  74. */
  75. @property (nonatomic, assign) UIRectCorner rectCorner;
  76. /**
  77. 是否显示阴影 Default is YES
  78. */
  79. @property (nonatomic, assign , getter=isShadowShowing) BOOL isShowShadow;
  80. /**
  81. 是否显示灰色覆盖层 Default is YES
  82. */
  83. @property (nonatomic, assign) BOOL showMaskView;
  84. /**
  85. 选择菜单项后消失 Default is YES
  86. */
  87. @property (nonatomic, assign) BOOL dismissOnSelected;
  88. /**
  89. 点击菜单外消失 Default is YES
  90. */
  91. @property (nonatomic, assign) BOOL dismissOnTouchOutside;
  92. /**
  93. 设置字体大小 自定义cell时忽略 Default is 15
  94. */
  95. @property (nonatomic, assign) CGFloat fontSize;
  96. /**
  97. 设置字体 设置时忽略fontSize Default is nil
  98. */
  99. @property (nonatomic, strong) UIFont * font;
  100. /**
  101. 设置字体颜色 自定义cell时忽略 Default is [UIColor blackColor]
  102. */
  103. @property (nonatomic, strong) UIColor * textColor;
  104. /**
  105. 设置偏移距离 (>= 0) Default is 0.0
  106. */
  107. @property (nonatomic, assign) CGFloat offset;
  108. /**
  109. 边框宽度 Default is 0.0
  110. 设置边框需 > 0
  111. */
  112. @property (nonatomic, assign) CGFloat borderWidth;
  113. /**
  114. 边框颜色 Default is LightGrayColor
  115. borderWidth <= 0 无效
  116. */
  117. @property (nonatomic, strong) UIColor * borderColor;
  118. /**
  119. 箭头宽度 Default is 15
  120. */
  121. @property (nonatomic, assign) CGFloat arrowWidth;
  122. /**
  123. 箭头高度 Default is 10
  124. */
  125. @property (nonatomic, assign) CGFloat arrowHeight;
  126. /**
  127. 箭头位置 Default is center
  128. 只有箭头优先级是YBPopupMenuPriorityDirectionLeft/YBPopupMenuPriorityDirectionRight/YBPopupMenuPriorityDirectionNone时需要设置
  129. */
  130. @property (nonatomic, assign) CGFloat arrowPosition;
  131. /**
  132. 箭头方向 Default is YBPopupMenuArrowDirectionTop
  133. */
  134. @property (nonatomic, assign) YBPopupMenuArrowDirection arrowDirection;
  135. /**
  136. 箭头优先方向 Default is YBPopupMenuPriorityDirectionTop
  137. 当控件超出屏幕时会自动调整箭头位置
  138. */
  139. @property (nonatomic, assign) YBPopupMenuPriorityDirection priorityDirection;
  140. /**
  141. 可见的最大行数 Default is 5;
  142. */
  143. @property (nonatomic, assign) NSInteger maxVisibleCount;
  144. /**
  145. menu背景色 自定义cell时忽略 Default is WhiteColor
  146. */
  147. @property (nonatomic, strong) UIColor * backColor;
  148. /**
  149. item的高度 Default is 44;
  150. */
  151. @property (nonatomic, assign) CGFloat itemHeight;
  152. /**
  153. popupMenu距离最近的Screen的距离 Default is 10
  154. */
  155. @property (nonatomic, assign) CGFloat minSpace;
  156. /**
  157. 设置显示模式 自定义cell时忽略 Default is YBPopupMenuTypeDefault
  158. */
  159. @property (nonatomic, assign) YBPopupMenuType type;
  160. /**
  161. 屏幕旋转管理
  162. */
  163. @property (nonatomic, strong) id <YBPopupMenuDeviceOrientationManager> orientationManager;
  164. /**
  165. 动画管理
  166. */
  167. @property (nonatomic, strong) id <YBPopupMenuAnimationManager> animationManager;
  168. /**
  169. 代理
  170. */
  171. @property (nonatomic, weak) id <YBPopupMenuDelegate> delegate;
  172. /**
  173. 在指定位置弹出
  174. @param point 弹出的位置
  175. @param titles 标题数组 数组里是NSString/NSAttributedString
  176. @param icons 图标数组 数组里是NSString/UIImage
  177. @param itemWidth 菜单宽度
  178. @param otherSetting 其他设置
  179. */
  180. + (YBPopupMenu *)showAtPoint:(CGPoint)point
  181. titles:(NSArray *)titles
  182. icons:(NSArray *)icons
  183. menuWidth:(CGFloat)itemWidth
  184. otherSettings:(void (^) (YBPopupMenu * popupMenu))otherSetting;
  185. /**
  186. 依赖指定view弹出
  187. @param titles 标题数组 数组里是NSString/NSAttributedString
  188. @param icons 图标数组 数组里是NSString/UIImage
  189. @param itemWidth 菜单宽度
  190. @param otherSetting 其他设置
  191. */
  192. + (YBPopupMenu *)showRelyOnView:(UIView *)view
  193. titles:(NSArray *)titles
  194. icons:(NSArray *)icons
  195. menuWidth:(CGFloat)itemWidth
  196. otherSettings:(void (^) (YBPopupMenu * popupMenu))otherSetting;
  197. /**
  198. 隐藏
  199. */
  200. - (void)dismiss;
  201. /**
  202. 隐藏window上所有的popupMenu
  203. */
  204. + (void)dismissAllPopupMenu;
  205. @end