MJRefreshNormalHeader.m 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. //
  2. // MJRefreshNormalHeader.m
  3. // MJRefreshExample
  4. //
  5. // Created by MJ Lee on 15/4/24.
  6. // Copyright (c) 2015年 小码哥. All rights reserved.
  7. //
  8. #import "MJRefreshNormalHeader.h"
  9. @interface MJRefreshNormalHeader()
  10. {
  11. __weak UIImageView *_arrowView;
  12. }
  13. @property (weak, nonatomic) UIActivityIndicatorView *loadingView;
  14. @end
  15. @implementation MJRefreshNormalHeader
  16. #pragma mark - 懒加载子控件
  17. - (UIImageView *)arrowView
  18. {
  19. if (!_arrowView) {
  20. UIImageView *arrowView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:MJRefreshSrcName(@"arrow.png")]];
  21. [self addSubview:_arrowView = arrowView];
  22. }
  23. return _arrowView;
  24. }
  25. - (UIActivityIndicatorView *)loadingView
  26. {
  27. if (!_loadingView) {
  28. UIActivityIndicatorView *loadingView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
  29. loadingView.hidesWhenStopped = YES;
  30. [self addSubview:_loadingView = loadingView];
  31. }
  32. return _loadingView;
  33. }
  34. #pragma makr - 重写父类的方法
  35. - (void)placeSubviews
  36. {
  37. [super placeSubviews];
  38. // 箭头
  39. self.arrowView.mj_size = self.arrowView.image.size;
  40. CGFloat arrowCenterX = self.mj_w * 0.5;
  41. if (!self.stateLabel.hidden) {
  42. arrowCenterX -= 100;
  43. }
  44. CGFloat arrowCenterY = self.mj_h * 0.5;
  45. self.arrowView.center = CGPointMake(arrowCenterX, arrowCenterY);
  46. // 圈圈
  47. self.loadingView.frame = self.arrowView.frame;
  48. }
  49. - (void)setState:(MJRefreshState)state
  50. {
  51. MJRefreshCheckState
  52. // 根据状态做事情
  53. if (state == MJRefreshStateIdle) {
  54. if (oldState == MJRefreshStateRefreshing) {
  55. self.arrowView.transform = CGAffineTransformIdentity;
  56. [UIView animateWithDuration:MJRefreshSlowAnimationDuration animations:^{
  57. self.loadingView.alpha = 0.0;
  58. } completion:^(BOOL finished) {
  59. // 如果执行完动画发现不是idle状态,就直接返回,进入其他状态
  60. if (self.state != MJRefreshStateIdle) return;
  61. self.loadingView.alpha = 1.0;
  62. [self.loadingView stopAnimating];
  63. self.arrowView.hidden = NO;
  64. }];
  65. } else {
  66. [self.loadingView stopAnimating];
  67. self.arrowView.hidden = NO;
  68. [UIView animateWithDuration:MJRefreshFastAnimationDuration animations:^{
  69. self.arrowView.transform = CGAffineTransformIdentity;
  70. }];
  71. }
  72. } else if (state == MJRefreshStatePulling) {
  73. [self.loadingView stopAnimating];
  74. self.arrowView.hidden = NO;
  75. [UIView animateWithDuration:MJRefreshFastAnimationDuration animations:^{
  76. self.arrowView.transform = CGAffineTransformMakeRotation(0.000001 - M_PI);
  77. }];
  78. } else if (state == MJRefreshStateRefreshing) {
  79. self.loadingView.alpha = 1.0; // 防止refreshing -> idle的动画完毕动作没有被执行
  80. [self.loadingView startAnimating];
  81. self.arrowView.hidden = YES;
  82. }
  83. }
  84. @end