纯代码搭建界面及相关注意点

来源:互联网 发布:我的世界java路径 编辑:程序博客网 时间:2024/06/18 13:23

纯代码搭建UI界面主要步骤:

1、系统初始化时视图控制器已经创建了根视图,即self.view

2、创建需要添加到UI界面上的控件

3、设置控件的背景颜色、文字及字体颜色、控件样式等等各种属性

4、设置控件的frame

5、将控件添加到根视图(self.view addSubView)

例如:纯代码搭建小飞机游戏中:

1)首先加载背景图

//设置背景图- (void)setupBackground{    //1、添加UIImageView,加载背景图片    UIImageView *imgViewBg = [[UIImageView alloc]init];    //设置UIImageView的frame    imgViewBg.frame = self.view.frame;    //设置背景图片    UIImage *imgBg = [UIImage imageNamed:@"background"];    imgViewBg.image = imgBg;    //添加到视图    [self.view addSubview:imgViewBg];}

2)设置飞机按钮

首先在类拓展中添加属性

@property (nonatomic,weak) UIButton *btnPlane;

再次设置飞机按钮

//设置小飞机- (void) setupPlane{    //2、添加UIButton,加载飞机图片    UIButton *btnPlane = [UIButton buttonWithType:UIButtonTypeCustom];    //设置按钮图片    UIImage *imgPlaneNormal = [UIImage imageNamed:@"hero1"];    UIImage *imgPlaneHighlighted = [UIImage imageNamed:@"hero2"];    [btnPlane setImage:imgPlaneNormal forState:UIControlStateNormal];    [btnPlane setImage:imgPlaneHighlighted forState:UIControlStateHighlighted];    //设置frame    [btnPlane sizeToFit];    btnPlane.center = self.view.center;    //添加视图    [self.view addSubview:btnPlane];    //赋值    _btnPlane = btnPlane;}

3)创建控制飞机移动的四个按钮

//创建按钮方法- (UIButton*) createDirctionButton:(NSString*)strDirction{    //创建一个button    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];    //为button设置两种状态的图片    UIImage *imgNormal = [UIImage imageNamed:[NSString stringWithFormat:@"%@_normal",strDirction]];    UIImage *imgHighlighted = [UIImage imageNamed:[NSString stringWithFormat:@"%@_highlighted",strDirction]];        [button setImage:imgNormal forState:UIControlStateNormal];    [button setImage:imgHighlighted forState:UIControlStateHighlighted];        //添加到视图    [self.view addSubview:button];    //返回按钮    return button;}

- (void)setupDirctionButton{    //创建四个方向按钮    UIButton *topButton = [self createDirctionButton:@"top"];    UIButton *bottomButton = [self createDirctionButton:@"bottom"];    UIButton *leftButton = [self createDirctionButton:@"left"];    UIButton *rightButton = [self createDirctionButton:@"right"];        //设置方向按钮的frame    CGFloat width = 45;    CGFloat height = 45;    CGFloat x = self.view.center.x - width * 0.5;    CGFloat y = self.view.center.y + 200;        CGRect rect = CGRectMake(x, y, width, height);        topButton.frame = CGRectOffset(rect, 0, -50);    bottomButton.frame = CGRectOffset(rect, 0, 50);    leftButton.frame = CGRectOffset(rect, -50, 0);    rightButton.frame = CGRectOffset(rect, 50, 0);        topButton.tag = HMDirctionTop;    leftButton.tag = HMDirctionLeft;    rightButton.tag = HMDirctionRight;    bottomButton.tag = HMDirctionBottom;        //为按钮添加监听事件    [topButton addTarget:self action:@selector(btnClickMovePlane:) forControlEvents:UIControlEventTouchUpInside];    [bottomButton addTarget:self action:@selector(btnClickMovePlane:) forControlEvents:UIControlEventTouchUpInside];    [leftButton addTarget:self action:@selector(btnClickMovePlane:) forControlEvents:UIControlEventTouchUpInside];    [rightButton addTarget:self action:@selector(btnClickMovePlane:) forControlEvents:UIControlEventTouchUpInside];}

4)创建按钮监听方法

- (void) btnClickMovePlane:(UIButton*)sender{    //因为不能直接对结构体赋值,因此要先取出飞机中心点    CGPoint center = self.btnPlane.center;    CGFloat distance = 10;    switch (sender.tag) {        case HMDirctionTop:            center.y -= distance;            break;        case HMDirctionLeft:            center.x -= distance;            break;        case HMDirctionRight:            center.x += distance;            break;        case HMDirctionBottom:            center.y += distance;            break;        default:            break;    }        self.btnPlane.center = center;}

5)在viewDidLoad中添加相关方法

- (void)viewDidLoad {    [super viewDidLoad];    //搭建界面    [self setupBackground];    [self setupPlane];    [self setupDirctionButton];}

注意点:

1)OC语言中枚举类型的定义

typedef NS_ENUM(NSInteger, HMDirction){    HMDirctionTop = 100,    HMDirctionLeft = 101,    HMDirctionRight = 102,    HMDirctionBottom = 103};

2)iOS的应用程序启动顺序是:

main.m → info.plist → 找到Launch screen interface file base name → 找到LaunchSrceen.storyboard → 在info.plist中找到Main storyboard file base name → 找到Main.storyboard → 找到带箭头的viewController(视图控制器) → 显示视图控制器中管理的视图(根视图)

3)IBOutlet 与 IBAction作用:

两个的作用都是“连线”,IBOutlet 标注一个属性是否可以连线,IBAction标注的storyboard中的控件是否可以连线

4)数字转换为字符串的方式

数字转换成字符串才能为控件赋值,所以:

方法一:[NSString stringWithFormat:”%zd”,num];

方法二:@(num).description, 先“装箱”,把数字装箱成对象,然后调用对象的description方法

%zd能适应编译器不同的环境。在32位系统下,%zd == %d,在64位系统下,%zd == %ld。

5)UIButton是一个复合控件,里面内置一个UIImageView和一个UILabel。

6)对象的结构体属性

对象的结构体属性不能直接修改,而是要先取出结构体属性,然后修改,再赋值回去。例如:

    // 错误的代码!!!    // self.btnPlane.frame.origin.y -= 10;    /**     * 错误原因:要修改一个对象的结构体属性里面的一个变量时,不能直接修改,而要先取出整个结构体,然后修改,然后在把修改后的结构体赋值回对象     */        // 正确的代码!!!    // 1. 先取出结构体属性    CGRect frm = self.btnPlane.frame;        // 2. 修改结构体中的变量    frm.origin.y -= 10;        // 3. 设置对象的结构体属性    self.btnPlane.frame = frm;

7)每一个控件有一个tag属性,可以辨别是哪一个控件。bag属性默认值为0,可以通过属性检查器修改,也可以用对象,tag修改。

8)一个方法可以监听多个控件的事件,多个方法也可以监听一个控件。(多对多关系)

一个属性不能引用多个控件,但是多个属性可以引用一个控件。(实际开发中,一个控件引用一个属性)

9)父视图与子视图是空间上的位置关系,不是继承关系。

10)视图控制器 的作用:

视图控制器创建个管理“根视图”,以及释放“根视图”;

视图控制器监听根视图中其他控件的事件。

0 0
原创粉丝点击