zoukankan      html  css  js  c++  java
  • UI基础九宫格

    一:九宫格图片展示公式
        子view的横向间距 = (父view的宽度- 3 * 子view的宽度) / 4 子view的纵向间距 = 20

        当前子view的行号 = 当前遍历到得索引值 / 总列数 当前子view的列号 = 当前遍历到得索引值 % 总列数

        当前子view的列号 = 当前遍历到得索引值 % 总列数

        子view横坐标的公式 = 子view的横向间距 + 列号 * (子view的横向间距+ 子view的宽度)

        子view纵坐标的公式 = 50 + 行号 * (子view的纵向间距+ 子view的高度) 

    二:代码示例:

    #import "ViewController.h"
    
    @interface ViewController ()
    // 1,创建接受模型数据的数组
    @property (nonatomic, strong) NSArray *appInfos;
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
        
        // 创建九宫格
        [self createView];
        
    }
    
    #pragma mark - 创建九宫格
    - (void)createView
    {
        // 1,
        // 1,1 列数
        int colnumCount = 3;
        CGFloat subViewWH= 100;
        CGFloat marginX = (self.view.frame.size.width - 3*subViewWH) / (colnumCount + 1);
        for (int i = 0; i<self.appInfos.count; i++) {
            
            // 计算行、列
            int row = i/colnumCount;
            int col = i%colnumCount;
            
            // 创建subView
            UIView *subView = [[UIView alloc] init];
    //        subView.backgroundColor = [UIColor redColor];
            [self.view addSubview:subView];
            
            // 确定subView的frame
            CGFloat subViewX = marginX + (marginX + subViewWH) * col;
            CGFloat subViewY = 30 + (marginX + subViewWH) * row;
            subView.frame = CGRectMake(subViewX, subViewY, subViewWH, subViewWH);
    #warning 将子控件添加到一个定义的view中的好处
            
            // 数据
            NSDictionary *appInfo = self.appInfos[i];
            // 创建子控件
            [self creatSubView:subView appInfo:appInfo];
            
            
        }
    }
    
    #pragma mark - 创建子控件
    - (void)creatSubView:(UIView *)subView appInfo:(NSDictionary *)appInfo
    {
        
        // 1,创建图片
        UIImageView *iconView = [[UIImageView alloc] init];
        [subView addSubview:iconView];
        
        // 1,1计算frame
        CGFloat iconViewWH = 60;
        CGFloat iconViewX = (subView.frame.size.width - iconViewWH) * 0.5;
        CGFloat iconViewY = 0;
        iconView.frame = CGRectMake(iconViewX, iconViewY, iconViewWH, iconViewWH);
        
        // 1,2添加数据
        iconView.image = [UIImage imageNamed:appInfo[@"icon"]];
        
        // 2,创建名称
        UILabel *titleView = [[UILabel alloc] init];
        [subView addSubview:titleView];
        
        titleView.textAlignment = NSTextAlignmentCenter;
    //    titleView.numberOfLines = 0;
        titleView.font = [UIFont systemFontOfSize:13];
    
        
        CGFloat titleViewX = 0;
        CGFloat titleViewY = CGRectGetMaxY(iconView.frame);
        CGFloat titleViewW = subView.frame.size.width;
        CGFloat titleViewH = 20;
        titleView.frame = CGRectMake(titleViewX, titleViewY, titleViewW, titleViewH);
        
        titleView.text = appInfo[@"name"];
        
        // 3,创建按钮
        UIButton *downView = [UIButton buttonWithType:UIButtonTypeCustom];
        [subView addSubview:downView];
        [downView setTitle:@"下载" forState:UIControlStateNormal];
        [downView setBackgroundImage:[UIImage imageNamed:@"buttongreen"] forState:UIControlStateNormal];
        [downView setBackgroundImage:[UIImage imageNamed:@"buttongreen_highlighted" ] forState: UIControlStateHighlighted];
    #warning 设置按钮字体
        // 设置按钮字体
        downView.titleLabel.font = [UIFont systemFontOfSize:13];
        
        CGFloat downViewX = iconViewX;
        CGFloat downViewY = CGRectGetMaxY(titleView.frame);
        CGFloat downViewW = iconViewWH;
        CGFloat downViewH = 20;
        downView.frame = CGRectMake(downViewX, downViewY, downViewW, downViewH);
    }
    
    #pragma mark - 懒加载模型数据
    - (NSArray *)appInfos
    {
        if (!_appInfos) {
    #warning NSBundle         //    NSLog(@"%@", NSHomeDirectory());
    
    
            // 1,重plist中读取数据
            NSString *path = [[NSBundle mainBundle] pathForResource:@"app.plist" ofType:nil];
            NSArray *appInfo = [NSArray arrayWithContentsOfFile:path];
            _appInfos = appInfo;
    //        NSLog(@"%@", _appInfos);
        }
        return _appInfos;
    }
    
    @end

    运行效果

    NSBundle的位置在 /Users/apple/Library/Developer/CoreSimulator/Devices/41F08730-2536-41FA-AAFD-4988F77D34D2/data/Containers

        注意:Library为隐藏文件

        代码设置按钮的字体:btn.titleLabel.font

  • 相关阅读:
    创建型模式
    react-React深入-一等公民-props-onChange
    [react] React 新手必须知道的 N 件事
    [react] 细数 React 的原罪
    创业一年,苟且偷生
    好书推荐-《人类简史》.md—/Users/zjh/Documents/我的文章/好书推荐-《人类简史》
    社会科学-主题阅读.md—/Users/zjh/Documents/我的文章
    好书推荐-《国富论》-15-09.md—/Users/zjh/Documents
    readme.md—/Users/zjh/Documents/我的文章/[PHP]swoole_server几个进程的分工
    [PHP]Yii2框架的坑.md—/Users/zjh/Documents/我的文章/[PHP]Yii2框架的坑
  • 原文地址:https://www.cnblogs.com/-boy/p/4111570.html
Copyright © 2011-2022 走看看