新手练习Demo-“九宫格”

来源:互联网 发布:lua 5.1 windows 编辑:程序博客网 时间:2024/06/05 07:08

本篇为新手练习demo的相关源码,实现效果为一般app商店的展示页面:

注:demo中所使用的图片素材和plist文件均为网络下载,仅供学习使用,如有雷同,纯属巧合。


话不多说,下面直接贴上源码,具体分析在注释中:

#import"ViewController.h"

@interface ViewController ()

/**

 存放应用信息

 */

@property(nonatomic,strong)NSArray *apps;

@end

@implementation ViewController

- (void)viewDidLoad {

    [superviewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

    //定义总列数

   int totalColumns=3;

    //定义每一个小应用的尺寸

   CGFloat appW=75;

   CGFloat appH=80;

    //x方向间距=(screen的宽度-3*应用的宽度)/4

   CGFloat marginX=(self.view.frame.size.width-totalColumns*appW)/(totalColumns+1);

    //Y方向间距

   CGFloat marginY=15;

    //根据应用的个数创建对应的框框(view)

   for (int index=0; index<self.apps.count; index++) {

    //添加1个存放app信息的view(小框框)

   UIView *appView=[[UIViewalloc]init];

   //计算小框框的位置

   int totalColumns=3;

    //计算行号,列号

   int row=index/totalColumns;

   int col=index %totalColumns;

   CGFloat appX=marginX+col*(appW+marginX);

   CGFloat appY=30+row*(appH+marginY);

    appView.frame=CGRectMake(appX, appY, appW, appH);

    //把框框添加到控制器view

    [self.viewaddSubview:appView];

   //添加内部控件

    //index位置对应的应用信息

   NSDictionary *appInfo=self.apps[index];

     //在小的view(小框框)上添加图片

    UIImageView *iconView=[[UIImageViewalloc]init];

   CGFloat iconW=45;

   CGFloat iconH=45;

   CGFloat iconX=(appW-iconW)*0.5;

   CGFloat iconY=0;

    iconView.frame=CGRectMake(iconX, iconY, iconW, iconH);

    iconView.image=[UIImageimageNamed:appInfo[@"icon"]];

    [appViewaddSubview:iconView];

    //在小框框上添加文字

     UILabel *nameLabel=[[UILabelalloc]init];

     CGFloat nameW=appW;

     CGFloat nameH=20;

     CGFloat nameX=0;

     CGFloat nameY=iconY+iconH;

     nameLabel.frame=CGRectMake(nameX, nameY, nameW, nameH);

     nameLabel.text=appInfo[@"name"];

     nameLabel.font=[UIFontsystemFontOfSize:13];

     nameLabel.textAlignment=NSTextAlignmentCenter;

     [appViewaddSubview:nameLabel];

     //在小框框添加下载按钮

     UIButton *downloadBtn=[[UIButtonalloc]init];

     CGFloat downloadX=12;

     CGFloat downloadY=nameY+nameH;

     CGFloat downloadW=appW-2*downloadX;

     CGFloat downloadH=20;

     downloadBtn.frame=CGRectMake(downloadX, downloadY, downloadW, downloadH);

     UIImage *normalImage=[UIImageimageNamed:@"buttongreen"];

     [downloadBtn setBackgroundImage:normalImageforState:UIControlStateNormal];   

     UIImage *highImage=[UIImageimageNamed:@"buttongreen_highlighted"];

     [downloadBtn setBackgroundImage:highImageforState:UIControlStateHighlighted];

     [downloadBtn setTitle:@"下载"forState:UIControlStateNormal];

      //按钮也就是button内部有labelimageview所以可以调用

      // downloadBtn.titleLabel.text=@"233";不安全,不知道在什么状态下显示,不推荐

     //按钮设置字体

      downloadBtn.titleLabel.font=[UIFontsystemFontOfSize:13];

      [appViewaddSubview:downloadBtn];  

    }

 }

-(NSArray*)apps

{

   if (_apps==nil) {

       //获得路径

        NSString *path=[[NSBundlemainBundle]pathForResource:@"app.plist"ofType:nil];

        //app.plist为数据文件,内层结构为一个大数组,分为几个字典,字典内放每一个应用的信息

        _apps=[NSArrayarrayWithContentsOfFile:path];

    }

   return_apps;

}

- (void)didReceiveMemoryWarning {

    [superdidReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}



0 0
原创粉丝点击