zoukankan      html  css  js  c++  java
  • 例如微博中的表情选择排布

    这里获取到所用数据之后,然后再算每一页因该有多少个emojin,然后把每一页有多少个的,然后赋值到数组中,然后进行排版

    #pragma mark - Datas
    - (void)setExpressionDatas:(NSArray *)expressionDatas
    {
        _expressionDatas = expressionDatas;// 修改
        
        // 删除之前的控件, 避免重复创建
        [self.expressionScrollView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];

        // 设置页数
        NSInteger pageCount = (expressionDatas.count + kEachPageEmotions - 1) / kEachPageEmotions;
        //    self.emotionsPageControl.numberOfPages = pageCount > 1 ? pageCount : 0;
        self.expressionPageControl.numberOfPages = pageCount;
        
        // 创建单页表情容器层
        for (int i = 0; i < pageCount; i ++)
        {
            YSWeiBoExpressionEmojiView *emotionsPageView = [[YSWeiBoExpressionEmojiView alloc] init];
            
            // 计算单页的表情范围
            NSRange range;
            
            //#define kEmotionPageViewMaxCols 7   // 最大列数
            //#define kEmotionPageViewMaxRows 3   // 最大行数
            //#define kEachPageEmotions (kEmotionPageViewMaxCols * kEmotionPageViewMaxRows - 1)        // 边距
            
            range.location = i * kEachPageEmotions;// 20
            // 每次分配后剩余的表情
            NSInteger residueEmotions = expressionDatas.count - range.location;// 减去第一页所剩的个数
            // 单页表情是否填满
            if (residueEmotions >= kEachPageEmotions)
            {
                range.length = kEachPageEmotions;
            }
            else
            {
                range.length = residueEmotions;
            }
            
            // 设置单页表情数
            emotionsPageView.expressionEmojidatas = [expressionDatas subarrayWithRange:range];
            
            [self.expressionScrollView addSubview:emotionsPageView];
        }
        
        // 重新设置子控件 -> 最近表情挤一块
        [self setNeedsLayout];
    }

    获取到使用Frame排布

    - (void)layoutSubviews
    {
        [super layoutSubviews];

        NSInteger emotionsCount = self.expressionEmojidatas.count;
        
        CGFloat emotionButtonW = (self.frame.size.width - 2 *kEmotionPageViewMargin) / kEmotionPageViewMaxCols;
        CGFloat emotionButtonH = (self.frame.size.height - kEmotionPageViewMargin) / kEmotionPageViewMaxRows;
        for (int i = 0; i < emotionsCount; i++)
        {
            YSWeiBoEmotionButton *emotionButton = self.subviews[i];
            emotionButton.backgroundColor = MJRandomColor;
            
            emotionButton.frame = CGRectMake
            (kEmotionPageViewMargin + (i % kEmotionPageViewMaxCols) * emotionButtonW,
             kEmotionPageViewMargin + (i / kEmotionPageViewMaxCols) * emotionButtonH,
                                             emotionButtonW,
                                             emotionButtonH);
        }
    }

  • 相关阅读:
    Bete冲刺第二阶段
    Beta版本冲刺计划及安排
    Bete冲刺第一阶段
    软件工程实践总结
    用户试用体验报告
    Bata版本冲刺计划及安排
    scrum阶段总结
    关于 微软必应词典客户端 的案例分析
    第三次结对编程
    结对项目之需求分析与原型模型设计
  • 原文地址:https://www.cnblogs.com/happyEveryData/p/5520888.html
Copyright © 2011-2022 走看看