File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshComponent.m |
| | |
| | | |
| | | #import "MJRefreshComponent.h" |
| | | #import "MJRefreshConst.h" |
| | | #import "UIView+MJExtension.h" |
| | | #import "UIScrollView+MJRefresh.h" |
| | | |
| | | @interface MJRefreshComponent() |
| | | @property (strong, nonatomic) UIPanGestureRecognizer *pan; |
| | |
| | | |
| | | - (void)layoutSubviews |
| | | { |
| | | [super layoutSubviews]; |
| | | |
| | | [self placeSubviews]; |
| | | |
| | | [super layoutSubviews]; |
| | | } |
| | | |
| | | - (void)placeSubviews{} |
| | |
| | | // 设置宽度 |
| | | self.mj_w = newSuperview.mj_w; |
| | | // 设置位置 |
| | | self.mj_x = 0; |
| | | self.mj_x = -_scrollView.mj_insetL; |
| | | |
| | | // 记录UIScrollView |
| | | _scrollView = (UIScrollView *)newSuperview; |
| | | // 设置永远支持垂直弹簧效果 |
| | | _scrollView.alwaysBounceVertical = YES; |
| | | // 记录UIScrollView最开始的contentInset |
| | | _scrollViewOriginalInset = _scrollView.contentInset; |
| | | _scrollViewOriginalInset = _scrollView.mj_inset; |
| | | |
| | | // 添加监听 |
| | | [self addObservers]; |
| | |
| | | - (void)removeObservers |
| | | { |
| | | [self.superview removeObserver:self forKeyPath:MJRefreshKeyPathContentOffset]; |
| | | [self.superview removeObserver:self forKeyPath:MJRefreshKeyPathContentSize];; |
| | | [self.superview removeObserver:self forKeyPath:MJRefreshKeyPathContentSize]; |
| | | [self.pan removeObserver:self forKeyPath:MJRefreshKeyPathPanState]; |
| | | self.pan = nil; |
| | | } |
| | |
| | | self.refreshingAction = action; |
| | | } |
| | | |
| | | - (void)setState:(MJRefreshState)state |
| | | { |
| | | _state = state; |
| | | |
| | | // 加入主队列的目的是等setState:方法调用完毕、设置完文字后再去布局子控件 |
| | | dispatch_async(dispatch_get_main_queue(), ^{ |
| | | [self setNeedsLayout]; |
| | | }); |
| | | } |
| | | |
| | | #pragma mark 进入刷新状态 |
| | | - (void)beginRefreshing |
| | | { |
| | |
| | | if (self.window) { |
| | | self.state = MJRefreshStateRefreshing; |
| | | } else { |
| | | self.state = MJRefreshStateWillRefresh; |
| | | // 刷新(预防从另一个控制器回到这个控制器的情况,回来要重新刷新一下) |
| | | [self setNeedsDisplay]; |
| | | // 预防正在刷新中时,调用本方法使得header inset回置失败 |
| | | if (self.state != MJRefreshStateRefreshing) { |
| | | self.state = MJRefreshStateWillRefresh; |
| | | // 刷新(预防从另一个控制器回到这个控制器的情况,回来要重新刷新一下) |
| | | [self setNeedsDisplay]; |
| | | } |
| | | } |
| | | } |
| | | |
| | | - (void)beginRefreshingWithCompletionBlock:(void (^)(void))completionBlock |
| | | { |
| | | self.beginRefreshingCompletionBlock = completionBlock; |
| | | |
| | | [self beginRefreshing]; |
| | | } |
| | | |
| | | #pragma mark 结束刷新状态 |
| | | - (void)endRefreshing |
| | | { |
| | | self.state = MJRefreshStateIdle; |
| | | dispatch_async(dispatch_get_main_queue(), ^{ |
| | | self.state = MJRefreshStateIdle; |
| | | }); |
| | | } |
| | | |
| | | - (void)endRefreshingWithCompletionBlock:(void (^)(void))completionBlock |
| | | { |
| | | self.endRefreshingCompletionBlock = completionBlock; |
| | | |
| | | [self endRefreshing]; |
| | | } |
| | | |
| | | #pragma mark 是否正在刷新 |
| | |
| | | if ([self.refreshingTarget respondsToSelector:self.refreshingAction]) { |
| | | MJRefreshMsgSend(MJRefreshMsgTarget(self.refreshingTarget), self.refreshingAction, self); |
| | | } |
| | | if (self.beginRefreshingCompletionBlock) { |
| | | self.beginRefreshingCompletionBlock(); |
| | | } |
| | | }); |
| | | } |
| | | @end |
| | | |
| | | @implementation UILabel(MJRefresh) |
| | | + (instancetype)label |
| | | + (instancetype)mj_label |
| | | { |
| | | UILabel *label = [[self alloc] init]; |
| | | label.font = MJRefreshLabelFont; |
| | |
| | | label.backgroundColor = [UIColor clearColor]; |
| | | return label; |
| | | } |
| | | @end |
| | | |
| | | - (CGFloat)mj_textWith { |
| | | CGFloat stringWidth = 0; |
| | | CGSize size = CGSizeMake(MAXFLOAT, MAXFLOAT); |
| | | if (self.text.length > 0) { |
| | | #if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 |
| | | stringWidth =[self.text |
| | | boundingRectWithSize:size |
| | | options:NSStringDrawingUsesLineFragmentOrigin |
| | | attributes:@{NSFontAttributeName:self.font} |
| | | context:nil].size.width; |
| | | #else |
| | | |
| | | stringWidth = [self.text sizeWithFont:self.font |
| | | constrainedToSize:size |
| | | lineBreakMode:NSLineBreakByCharWrapping].width; |
| | | #endif |
| | | } |
| | | return stringWidth; |
| | | } |
| | | @end |