首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

HMSegmentedControl源代码解析(11)

HMSegmentedControl源代码解析(11)

/**
计算title的cgsize
@param index 位置
@return 宽高
*/
- (CGSize)measureTitleAtIndexNSUInteger)index {
    if (index >= self.sectionTitles.count) {
        return CGSizeZero;
    }
   
    id title = self.sectionTitles[index];
    CGSize size = CGSizeZero;
   
    // 判断index是否和当前选中的index相等
    BOOL selected = (index == self.selectedSegmentIndex) ? YES : NO;
   
    if ([title isKindOfClass:[NSString class]] && !self.titleFormatter) {
        // 当title是string类型 而且formatter不存在的时候
        // 选中与非选中的时候返回一个富文本
        NSDictionary *titleAttrs = selected ? [self resultingSelectedTitleTextAttributes] : [self resultingTitleTextAttributes];
        size = [(NSString *)title sizeWithAttributes:titleAttrs];//计算文字经过富文本处理后的size
    } else if ([title isKindOfClass:[NSString class]] && self.titleFormatter) {
        // 当title是string类型 而且富文本存在的时候
        size = [self.titleFormatter(self, title, index, selected) size];
    } else if ([title isKindOfClass:[NSAttributedString class]]) {
        size = [(NSAttributedString *)title size];
    } else {
        NSAssert(title == nil, @"Unexpected type of segment title: %@", [title class]);
        size = CGSizeZero;
    }
   
    // 返回结果的最小矩形将源矩形值转换为整数。
    return CGRectIntegral((CGRect){CGPointZero, size}).size;
}
返回列表