iOS UI基础1


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    

    

    

    // 一、 window

    // window 就是用来展示控件的窗口。 iOS中, 手机应用开发 只能有一个 window

    // window 类似于我们作画的画板,我们通常不会在画板上作画,而是 在纸上作画。 window 一般不改变,改变的是内部内容。

    

    

    // 创建window对象,并且初始化为等屏大小

    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];

    // Override point for customization after application launch.

    

    // 设置 window 的背景颜色

    self.window.backgroundColor = [UIColor whiteColor];

    

    // window 设置为主窗口,并且可见

    [self.window makeKeyAndVisible];

    

    

    

    

    /*

    // 二、 UIView

    // UIView 是所有可视化控件的基类,代表一个矩形空间,展示相应内容和用户进行交互。

    

    // uiview 就相当于 画画的纸,需要添加到window上面。

    

    

    // 1. 创建view 并且进行初始化

    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 200, 200)];

    

    // 2. 设置背景颜色

    view.backgroundColor = [UIColor yellowColor]; // 黄色

    

    // 3. 添加到window

    [self.window addSubview:view];

    

    

    

    // 三、 frame

    // frame 代表了一个view 在父坐标系中的 位置 大小

    // frame 是一个结构体类型 CGRect 类型, 并且里面结构体成员也是结构体 origin size

    // origin CGPoint   x       y

    // size   CGSize   width  height

    

    // 创建一个cgrect 结构体 使用 CGRectMake() 函数创建

    CGRect rect1 = CGRectMake(200, 200, 50, 50);

    

    rect1.origin.x = 0;

    

    

    

    UIView *viewRect = [[UIView alloc] initWithFrame:rect1];

    

    

    viewRect.backgroundColor = [UIColor purpleColor];

    

    [self.window addSubview:viewRect];

    

    

    

    // 注意: 如何 view frame

    // 如果我们直接要该view frame 里面的x y 或者 width 或者 height 没有办法通过 view.frame.origin.x = xxx 或者 view.frame.size.width = xx 更改。

    // 因为 . 语法出现了 二义性 两种含义

    // view.frame  此时点语法是 getter 操作

    // origin.x  或者 size.width 为结构体访问成员变量

    

    // 1. 我们可以先获取 view frame

    // 2. 更改frame.origin.x

    // 3. 把更改后的 frame 再赋值给 view.frame

    

    

    

    // 1. 获取viewRect frame

    CGRect rect2 = viewRect.frame;

    

    // 2. 更改 rect2

    rect2.origin.x = 300;

    

    // 3. 赋值给 viewRect

    viewRect.frame = rect2;

    

    

    

    // center 属性

    // center 中心点 也是view的一个重要属性,表示view的中心。通常用来 移动 或者 改变位置的时候使用

    

    

    CGPoint center = viewRect.center; // 获取

    

    center.x = viewRect.frame.size.width / 2;  // 更改

    

    center.y = viewRect.frame.size.height / 2;

    

    viewRect.center = center; // 重新赋值

    

     

    */

    

    

    /*

    // bounds 边界

    // bounds  也是view的一个属性,表示view 能够显示出的范围

    // bounds CGRect类型(x,y ,width, height)

    // frame 不同的是 bounds 参考点为自身坐标系,表示view的左上角距离自身坐标系的距离。

    

    // bounds 默认值为 00width height

    

    // view 自身的坐标系,如果没有改变则都为左上角为原点,坐标值为(00

    

    // bounds 如果改变,意味着,view 视图自身的坐标系发生了变化,坐标向左移动,则 x值增大,反之减少。

    

    UIView *boundsView = [[UIView alloc] initWithFrame:(CGRectMake(50, 50, 200, 200))];

    

    boundsView.backgroundColor = [UIColor blueColor];

    

    [self.window addSubview:boundsView];

    

    

    NSLog(@"%@", NSStringFromCGRect(boundsView.bounds));

    

    

    // 获取bounds

    CGRect bounds =  boundsView.bounds;

    

    // 更改 坐标系原点

    bounds = CGRectMake(50, 50, 200, 200);

    

    // bounds 赋值

    boundsView.bounds = bounds;

    

    

    

    // boundsView 添加一个红色的子视图

    UIView *redView = [[UIView alloc] initWithFrame:(CGRectMake(50, 50, 100, 100))];

    

    redView.backgroundColor = [UIColor redColor];

    

    // 添加,添加给 boundsView,作为boudsView 的子视图

//    [boundsView addSubview:redView];

    

    

    // bounds  frame 区别

    // bounds view 视图左上角,距离自身坐标系的距离。

    // bounds 默认为(00,此时原点和视图左上角重合。

    // bounds 如果发生变化,不会影响view 的位置,影响的是 view 子视图的 位置。

    

    // frame  view 视图左上角, 距离 父视图坐标系的距离。

    // frame 需要我们在给 父视图添加子视图的时候 指定。

    // frame  子视图 在父坐标系中的位置

    // frame 发生变化, 视图位置发生变化

    

    // 注意: 如果bounds 宽高发生变化,是基于视图的中心点发生变化的,如果 宽度-100,结果是 左边-50,右边-50,中心位置没有发生变化。

     */

    

    

    /*

    // UIView 的相关方法

    // (1) 添加视图方法

    

    // addSubView 方法

    // addSubView 每次添加都是添加到了 subViews 数组的最后面

    

    // 1. 创建view 对象

    UIView *redView = [[UIView alloc] initWithFrame:(CGRectMake(100, 100, 100, 100))];

    

    // 2. 设置属性

    redView.backgroundColor = [UIColor redColor];

    

    // 3. 添加到window 上面

    [self.window addSubview:redView];

    

    // 4. 释放

    [redView release];

    

    // self.window  addSubview 是把view 添加到了 window.subViews 数组里面, 数组容器有一个特点,自动管理内部元素引用计数 add 增加引用计数 remove 减少引用计数

    

    // 打印 window subViews 属性

//    NSLog(@"%ld", self.window.subviews.count);

    

    

    // insertSubView: atIndex: 在制定下标处添加子视图,原位置视图后移, 不会出现数组越界,如果超出下标则添加到最后。

    

    UIView *orangeView = [[UIView alloc] initWithFrame:(CGRectMake(150, 150, 100, 100))];

    

    orangeView.backgroundColor = [UIColor orangeColor];

    

    [self.window insertSubview:orangeView atIndex:1];

    

    // 释放

    [orangeView release];

    

    

    // insertSubView: aboveSubview:

    // 把一视图添加到某视图之上

    UIView *yellowView = [[UIView alloc] initWithFrame:(CGRectMake(200, 200, 100, 100))];

    

    yellowView.backgroundColor = [UIColor yellowColor];

    

    [self.window insertSubview:yellowView aboveSubview:orangeView];

    

    // 释放

    [yellowView release];

    

    

    

    // insertSubview: belowSubView:

    UIView *greenView = [[UIView alloc] initWithFrame:(CGRectMake(150, 250, 100, 100))];

    

    greenView.backgroundColor = [UIColor greenColor];

    

    [self.window insertSubview:greenView belowSubview:yellowView];

    

    [greenView release];

    

    

    

    // (2) UIView 管理视图层次方法

    

    // removeFromSuperview 从父视图上面 移除子视图

    

//    [greenView removeFromSuperview];

//    [yellowView removeFromSuperview];

//    [orangeView removeFromSuperview];

//    [redView removeFromSuperview];

    

    NSArray *viewArrays = self.window.subviews;

    for (UIView *view in viewArrays) {

        

        // 只移除黄色视图

        if (view.backgroundColor == [UIColor yellowColor]) {

            

            [view removeFromSuperview];

            

        }

        

    }

    

    

    // UIView 的重要属性

    // 常用的一些属性

    // hidden 显隐性设置  alpha 透明度 superview 父视图

    // subViews 子视图们  tag 标记值

    

    // 1. 创建视图

    UIView *view = [[UIView alloc] initWithFrame:(CGRectMake(0, 300, 200, 200))];

    

    // 2. 设置属性

    view.backgroundColor = [UIColor redColor];

    

    view.hidden = NO; // no不隐藏,yes 隐藏视图,默认为 NO

    

    view.alpha = 0.5; // 透明度, 0.0~1.0 数值,默认为1.0

    

    view.tag = 100; // 设置标记值,方便 父视图 通过tag取该视图

    

    // view tag 值不能为0 因为 window tag 默认为0.

    // 通过 0 tag 值,取出来的始终是 window

    

    // 添加

    [self.window addSubview:view];

    

    UIWindow *window = (UIWindow *)view.superview; // 父视图

    NSLog(@"%@", window);

    

    NSArray *array = view.subviews; // 子视图数组

    NSLog(@"%@", array);

    

    // 通过tag值获取子视图

    UIView *view2 = [self.window viewWithTag:100];

    

    // 改变view2 的背景颜色

    view2.backgroundColor = [UIColor yellowColor];

    

    */

    

    

    // UILabel  标签视图

    

    // 作用: 负责文字的展现 (小段文字展现)

    

    // 使用步骤:

    // 1. 创建

    UILabel *label = [[UILabel alloc] initWithFrame:(CGRectMake(100, 100, 120, 100))];

    

    // 2. 设置属性

    

    label.text = @"long long ago , there  was a monkey who called Monkey King"; // 文本内容

    

    label.textColor = [UIColor blueColor]; // 文本颜色, 默认为黑色

    

    label.font = [UIFont systemFontOfSize:16]; // 文本字体

    

    label.lineBreakMode = NSLineBreakByCharWrapping; // 换行模式

    

    label.numberOfLines = 2; // 行数,设置为0 默认换行,一行不足则默认换行显示

    

    label.shadowColor = [UIColor redColor];

    

    label.shadowOffset = CGSizeMake(4, 4);

    

    

    // 3. 添加到父视图上

    [self.window addSubview:label];

    

    

    // 4. 释放

    [label release];

    

    

    // Xcode 7.0 之后要求 app必须有根视图控制器

    self.window.rootViewController = [[UIViewController alloc] init];



     // 一、

     // iOS 事件分为三类 

     // 触摸事件

     // 运动事件

     // 远程控制事件

     

     二、 触摸事件

     凡是与用户触摸有关的操作 都是触摸事件

     

     

     */

    

    // 创建对象

    TouchView *touchView = [[TouchView alloc] initWithFrame:(CGRectMake(100, 100, 100, 100))];

    

    touchView.backgroundColor = [UIColor redColor];

    touchView.multipleTouchEnabled = YES; // 支持多点触摸, 默认为 no 不支持多点触摸

    

    //  阻断响应者链

    touchView.userInteractionEnabled = NO; // 关闭用户交互

    

    //  阻断响应者链有三种方式:

    // 1. 关闭用户交互 userInteractionEnabled 设置为 no

    // 2. 隐藏控件  hidden 设置为 yes,隐藏控件

    // 3. 透明图   alpha 小于 0.01 时候,

    

    // UIImageView 图像视图 默认用户交互是关闭的

    

    

    

    [self.view addSubview:touchView];

    

    

    

     /******************** 练习3 *************************/

    // 阻断响应者链


// 3. 实现 UITextFieldDelegate 协议里 回收键盘的方法 - (BOOL)textFieldShouldReturn:(UITextField *)textField;

- (BOOL)textFieldShouldReturn:(UITextField *)textField

{

    // 让键盘回收,只要让 当前输入框取消第一响应者 即可

    // 当前输入框: 就是该方法textFieldShouldReturn:参数传递过来的 输入框

    // 输入框 取消第一响应者

//    [textField resignFirstResponder];

    


    // return 按钮实现 改变第一响应者

    // 1. 通过 tag 判断是否是最后一个输入框

    if (textField.tag != 3) {

        // 如果不是最后一个输入框,则取消当前第一响应者,让下一个输入框成为第一响应者

        

        [textField resignFirstResponder];

        

        // 取到下一个输入框 通过tag 值取

        UITextField *nextTF = (UITextField *)[self.window viewWithTag:textField.tag + 1]; // 当前输入框的tag + 1 就是下一个输入框的tag

        

        // 下一个输入框成为第一相应者

        [nextTF becomeFirstResponder];

        

    } else{ // tag == 3 ,说明是最后一个输入框,取消第一相应者

        

        [textField resignFirstResponder];

    }


    

    return NO;

}



- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];

    

    // Override point for customization after application launch.

    self.window.backgroundColor = [UIColor whiteColor];

    [self.window makeKeyAndVisible];

    

    

    // 7.0 设置根视图控制器

    self.window.rootViewController = [[[UIViewController alloc] init] autorelease];

    

    

    

//    // 一、 UITextField

//    

//    // 1. 创建并且初始化

//    UITextField *textField1 = [[UITextField alloc] initWithFrame:CGRectMake(50, 50, 200, 40)];

//    

//    // 2. 设置属性

//    textField1.placeholder = @"请输入密码"; // 占位符

//    

//    textField1.borderStyle = UITextBorderStyleRoundedRect;  // 圆角边框

//    

//    

//    // 3. 添加

//    [self.window addSubview:textField1];

//    

//    

//    // 4. 释放

//    [textField1 release];

//    

//    

//    

//    

//    // 二、 textField 常用属性

//    

//    // 1. 创建对象并且初始化

//    UITextField *textField2 = [[UITextField alloc] initWithFrame:(CGRectMake(50, 100, 200, 40))];

//    

//    // 2. 设置属性

//    

//    // (1) 文本属性 text textColor placeHolder textAlign

//    

//    // 要求掌握的  placeHolder

//    textField2.placeholder = @"请输入密码"; // 占位符

//    

//    // 了解

//    textField2.text = @"123456"; // 文本内容

//    

//    textField2.textColor = [UIColor redColor]; // 文本颜色

//    

//    textField2.textAlignment = NSTextAlignmentLeft; // 对齐方式

//    

//    

//    

//    // (2) 输入控制

//    // 输入开始:enabled 清除

//    textField2.enabled =  YES; // no为不允许输入,默认为yes 允许输入

//    

    textField2.clearsOnBeginEditing = YES; // 开始输入时清除原有内容

//    

//    // 输入时:

//    textField2.secureTextEntry = YES; // 安全输入方式

//    

    textField2.keyboardType = UIKeyboardTypeNumberPad; // 数字键盘, 默认为全字母键盘

//    

//    

//    // 输入后

//    textField2.returnKeyType = UIReturnKeyNext; // return 类型

   

    UIView *inputView = [[UIView alloc] initWithFrame:(CGRectMake(0, 0, 375, 100))];

    inputView.backgroundColor = [UIColor redColor];

    textField2.inputView = inputView;

    [inputView release];

//    

//    

//    // (3) 外观属性  边框样式、清除按钮、 左视图、右视图

//    

//    textField2.borderStyle = UITextBorderStyleRoundedRect; // 圆角样式

//    

//    textField2.clearButtonMode = UITextFieldViewModeAlways;

//    // 始终显示

//    // 始终不显示

//    // 当编辑的时候才显示

//    // 不编辑的时候显示

//    

   

    UIView *leftView = [[UIView alloc] initWithFrame:(CGRectMake(0, 0, 40, 40))];

    leftView.backgroundColor = [UIColor yellowColor];

    textField2.leftView = leftView;

    textField2.leftViewMode = UITextFieldViewModeAlways;

    [leftView release];

//    

//    

//    

//    

//    

//    

//    // 3. 添加

//    [self.window addSubview:textField2];

//    

//    

//    // 4. 释放

//    [textField2 release];

    

    

    

    // 二、 UIButton 按钮控件

    

    // 创建 button 的步骤

    

    // 1. 开辟空间并且初始化,或者 使用类方法创建

    // 类方法

    UIButton *loginButton = [UIButton buttonWithType:(UIButtonTypeSystem)];

    

    // buttonType 有多重,通常我们使用 系统样式或者 自定义样式,系统样式 提供了标题的默认字体 和颜色 (蓝色), 自定义样式什么都没有,需要我们自己指定

    

    

    // 2. 设置属性

    // frame

    loginButton.frame = CGRectMake(50, 300, 145, 46);

    

    // title

//    [loginButton setTitle:@"登录" forState:(UIControlStateNormal)]; // 没有点击的状态下 标题为 登录

    

    // 设置背景图片

    [loginButton setBackgroundImage:[UIImage imageNamed:@"login_button@2x.png"] forState:(UIControlStateNormal)];

    

    

    

    // 3. 添加点击事件

    // button 添加一个点击事件,当我们点击 button 的时候,让 目标 target 执行相应的事件 action

    

    //target 执行action操作的目标对象 这里是 self

    // self 此时是 AppDelegate

    // self 写在哪个类内部, 哪个类的对象就是self

    // 羊毛出现

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值