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的宽度

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

image.png

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,521评论 4 61
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,333评论 19 139
  • UIImageView添加圆角最直接的方法就是使用如下属性设置: imgView.layer.cornerRadi...
    dicesc阅读 1,336评论 0 0
  • 我坐在一辆开往“目的地”的午夜列车内,信马由缰地翻看着一本在车站书店里随手买来权作消遣的畅销书,独享一排舒适而柔软...
    逆撑阅读 533评论 0 1
  • 焉知非鱼阅读 210评论 0 0

友情链接更多精彩内容