财神随手记账

HPSlideSegmentLogic.h 5.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. //
  2. // HPSlideLogic.h
  3. // HPSlideSegmentView
  4. //
  5. // Created by 何鹏 on 17/6/14.
  6. // Copyright © 2017年 何鹏. All rights reserved.
  7. //
  8. #import <UIKit/UIKit.h>
  9. #import "HPSegmentEnum.h"
  10. typedef struct{
  11. CGFloat x;
  12. CGFloat width;
  13. }HPPoint;
  14. typedef struct {
  15. NSInteger number;
  16. char *error;
  17. }HPNumber;
  18. CG_INLINE HPPoint
  19. HPPointMake(CGFloat x, CGFloat width)
  20. {
  21. HPPoint point;
  22. point.x=x;
  23. point.width=width;
  24. return point;
  25. }
  26. CG_INLINE HPNumber
  27. HPNumberMake(NSUInteger index, char *string)
  28. {
  29. HPNumber number;
  30. number.number=index;
  31. number.error=string;
  32. return number;
  33. }
  34. typedef void (^CHANGEINDEXBLOCK)(HPNumber left,HPNumber centre,HPNumber right,CGPoint startPoint);
  35. typedef void (^ENDBLOCK)(void);
  36. typedef void (^ChangeStartPoint)(CGPoint startPoint,CGPoint endPoint);
  37. typedef void (^ModuleAnimationBlock)(NSUInteger nowIndex,NSUInteger readyIndex,CGFloat movePercent);
  38. typedef void (^BoardBlock)(void);
  39. @interface HPSlideSegmentLogic : NSObject
  40. /**
  41. 滑块的布局
  42. @param oldpoint 前一个滑块的位置
  43. @param slideViewHeight 当前滑块的高度
  44. @param isModule 是否需要滑块
  45. @param text 滑块显示的内容
  46. @param fontSize 滑块上面label字体的大小
  47. @param edgeInsets button的边距
  48. @param minWidth button最小距离
  49. @param type button的自动大小设置
  50. @return 返回一个 frame
  51. */
  52. +(CGRect)oldButtonPoint:(HPPoint)oldpoint
  53. slideViewHeight:(CGFloat)slideViewHeight
  54. isModule:(BOOL)isModule
  55. content:(NSString *)text
  56. fontSize:(CGFloat)fontSize
  57. edgeInsets:(UIEdgeInsets)edgeInsets
  58. minWidth:(CGFloat)minWidth
  59. autoType:(AutoSizeType)type;
  60. /**
  61. 设置跟踪滑块的高度
  62. @param slideModuleHeight 滑块的高度
  63. @param slideViewHeight 滑块的背景view
  64. @param width 滑块的宽度
  65. @param buttonX button的X位置
  66. @return 返回 滑块的frame
  67. */
  68. +(CGRect)slideModuleWithView:(CGFloat)slideModuleHeight
  69. slideViewHeight:(CGFloat)slideViewHeight
  70. defauleWidth:(CGFloat)width
  71. buttonWithX:(CGFloat)buttonX;
  72. /**
  73. 判断越界
  74. @param arrays 数据源
  75. @param index 当前的index
  76. @return 返回在合理范围的 arrays 的数据
  77. */
  78. +(id)arrayCount:(NSArray *)arrays index:(NSInteger)index;
  79. /**
  80. 对象是否越界 如果越界返回nil
  81. @param arrays 数据源
  82. @param index 当前的index
  83. @return 返回是否存在改数据
  84. */
  85. +(id)isArrayWithNil:(NSArray *)arrays index:(NSInteger)index;
  86. /**
  87. 防止数组越界
  88. @param arrayCount 数据源 (不能为0)
  89. @param index 当前的位置
  90. @return 返回一个合理位置
  91. */
  92. +(NSUInteger)arraCount:(NSUInteger)arrayCount index:(NSInteger)index;
  93. /**
  94. 设置contentSize.width
  95. @param width scrollView的宽度
  96. @param dataArrayCount 数据源的个数
  97. @return 返回contentSize.width
  98. */
  99. +(CGFloat)scrollViewWidth:(NSUInteger)width dataArrayCount:(NSUInteger)dataArrayCount;
  100. /**
  101. 边界判断
  102. @param width scrollview的宽度
  103. @param dataArrayCount 数据源的个数
  104. @param currentIndex 当前位置
  105. @return 返回Offset位置
  106. */
  107. +(CGFloat)scrollViewWidth:(NSUInteger)width
  108. arrayDataCount:(NSUInteger)dataArrayCount
  109. currentIndex:(NSUInteger)currentIndex;
  110. +(void)scrollViewWithStartPoint:(CGPoint)startOffset
  111. moveOffset:(CGPoint)moveOffset
  112. slideModuleWidht:(CGFloat)slideModuleWith
  113. currentIndex:(NSUInteger )currentIndex
  114. dataArray:(NSUInteger)arrayCount
  115. startPointBlock:(ChangeStartPoint)startPointBlock;
  116. /**
  117. 判断方向
  118. @param scrollView 滑动scrollView
  119. @param currentIndex 当前的位置
  120. @param startOffset 滑动开始的位置
  121. @param arrayDataCount 数组的个数
  122. @param boardBlock 改变左右滑块的内容
  123. @param moduleAnimationBlock 执行滑块动画
  124. */
  125. +(void)scrollView:(UIScrollView *)scrollView
  126. currentIndex:(NSUInteger)currentIndex
  127. startOffset:(CGPoint )startOffset
  128. dataArray:(NSUInteger )arrayDataCount
  129. boardBlock:(BoardBlock)boardBlock
  130. moduleBlock:(ModuleAnimationBlock)moduleAnimationBlock;
  131. /**
  132. 滑动停止返回的位置信息
  133. @param slideViewWidth scrollview的宽度
  134. @param scrollView 滑动的scrollview
  135. @param currentIndex 当前的index
  136. @param startOffset 结束的offset
  137. @param arrayDataCount 数据源的个数 (不能为0)
  138. @param changeBlock 返回位置信息
  139. */
  140. +(void)slideSuperView:(CGFloat)slideViewWidth
  141. scrollView:(UIScrollView *)scrollView
  142. currentIndex:(NSUInteger)currentIndex
  143. startOffset:(CGPoint )startOffset
  144. dataArray:(NSUInteger )arrayDataCount
  145. changeIndex:(CHANGEINDEXBLOCK)changeBlock;
  146. /**
  147. 滑块动画
  148. @param slideModule 需要设置滑块动画
  149. @param slideModuleWith 滑块的实际宽度
  150. @param nowPoint 当前位置
  151. @param readyPoint 准备到达的位置
  152. @param movePercent 从当前位置到准备位置的百分比
  153. */
  154. +(void)animationSlideView:(UIView *)slideModule
  155. slideModuleWidht:(CGFloat)slideModuleWith
  156. nowPoint:(HPPoint)nowPoint
  157. readyButton:(HPPoint)readyPoint
  158. movePercent:(CGFloat)movePercent;
  159. /**
  160. 跳转到指定页面
  161. @param currentIndex 指定页面的index
  162. @param arrayCount 数据源的个数
  163. @param scrollView 滑动的scrollView
  164. @param slideViewWidth scrollview的宽度
  165. @param changeBlock 返回位置信息
  166. */
  167. +(void)currentIndex:(NSUInteger)currentIndex
  168. arrayCount:(NSUInteger)arrayCount
  169. scrollView:(UIScrollView *)scrollView
  170. slideSuperView:(CGFloat)slideViewWidth
  171. changeIndex:(CHANGEINDEXBLOCK)changeBlock;
  172. /**
  173. 滑块居中逻辑
  174. @param currentScrollerView 当前的scrollview
  175. @param slideModuleX 滑块的X位置
  176. */
  177. +(void)slideModuleAlignCenter:(UIScrollView *)currentScrollerView
  178. slideModuleWithX:(CGFloat)slideModuleX;
  179. @end