MJRefresh代码总结

多行宏定义注释

// 状态检查
#define MJRefreshCheckState \
MJRefreshState oldState = self.state; \
if (state == oldState) return; \
[super setState:state];

当定义的宏不能一行表达完整时,可以在行的最后加反斜杠,说明下一行继续此宏的定义,最后一行不要加续行符,VC的预处理器在编译之前会自动将\与换行回车去掉(写成多行时,反斜杠后不能有空格,否则编译器(ARM或VC)会报错!)

计算文字的宽度

@interface UILabel(MJRefresh)
- (CGFloat)mj_textWith;
@end

@implementation UILabel(MJRefresh)
- (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

在MJRefreshComponent这个基类中,添加UILabel的分类,计算出label的宽度,子类生成的label都可以用这个方法得到label的宽度

提取基类,只需要使用最底层的类

MJRefresh代码总结_第1张图片
image.png

这个是MJRefresh的结构设计,我们只需要用到显示层来完成我们需要达到的效果

你可能感兴趣的:(MJRefresh代码总结)