1. UI编程概述

 UI的本意是用户界面,是英文 User 和 Interface 的缩写。

 UI设计则是指对软件的人机交互、操作逻辑、界面美观的整体设计。

 好的UI设计不仅是让软件变得有个性有品位,还要让软件的操作变得舒适简单、自由,充分体现软件的定位和特点。

 软件设计可分为两个部分:编码设计与UI设计。

 从字面上看是用户与界面两个部分组成,但实际上还包括用户与界面之间的交互关系。

2. UIWindow

 1> 概述

  管理和协调应用程序的显示。

  UIWindow 类是 UIView 的子类,可以看作是特殊的 UIView 。

  一般应用程序只有一个 UIWindow 对象。

 2> 自动创建流程

  程序运行从 main() 函数开始执行 UIApplicationMain() 创建代理

  加载配置文件 info.plist (Main Interface设置了程序的主入口)

  根据 name 找到对应的 storyboard , 加载 storyboard

  storyboard 会自动创建一个 UIWindow 对象

 3> 手动创建流程

  ① 关闭 Main Interface  

  ② 在 AppDeletegate.m 的 application 方法中创建,创建代码如下:

  1. // 1.创建UIWindow对象,并设置为屏幕的大小
  2. // [UIScreen mainScreen].bounds 获取屏幕的大小
  3. self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
  4.  
  5. // 2.给window设置背景的颜色(白色)
  6. self.window.backgroundColor = [UIColor whiteColor];
  7.  
  8. // 3.使window显示
  9. // makeKeyAndVisible 将窗口设为主窗口并显示
  10. [self.window makeKeyAndVisible];
  11.  
  12. // 4.为window设置根视图控制器(XCode7.0之后必须写)
  13. // 创建视图控制器对象
  14. ViewController *VC = [[ViewController alloc] init];
  15.  
  16. // 把VC设置为window的根视图控制器
  17. self.window.rootViewController = VC;

 4> 屏幕大小

  iPhone4(s)      : 320 * 480

  iPhone5(s)      : 320 * 568

  iPhone6(s)      : 375 * 667

  iPhone6(s) Plus : 414 * 736

3. UIView

 1> 概述

  UIView 表示屏幕上的一块矩形区域。

  它在App中占有绝对重要的地位。

  因为iOS中几乎所有可视化控件都是 UIView 的子类。

  负责渲染区域的内容,并且响应该区域内发生的触摸事件。

 2> 功能

  • 管理矩形区域里的内容
  • 处理矩形区域中的事件
  • 子视图的管理
  • 实现UIView动画

  UIView作为父类,子类也具有这些功能

 3> 坐标系相关数据的类型

  坐标:
   struct CGPoint {
     CGFloat x;
     CGFloat y;
   };
   typedef struct CGPoint CGPoint;
    大小:
   struct CGSize {
     CGFloat width;
     CGFloat height;
   };
   typedef struct CGSize CGSize;

  矩形:
   struct CGRect {
     CGPoint origin;
     CGSize size;
   };
   typedef struct CGRect CGRect;

  iOS 中使用 CGRect 类型确定矩形位置以及大小

  CGRectMake() 函数可以帮我们快速构造一个 CGRect 变量。

 4> UIView常用属性

  1. // center 中心点
  2. view1.center = self.window.center; // 设置view1居中
  3. NSLog(@"x = %.2f, y = %.2f", view1.center.x, view1.center.y);
  4.  
  5. // alpha 视图的透明度
  6. view1.alpha = 0.9;
  7.  
  8. // hidden
  9. view1.hidden = NO;
  10.  
  11. // superview
  12. NSLog(@"%@", view1.superview);
  13.  
  14. // subviews
  15. NSLog(@"%@", self.window.subviews);
  16.  
  17. // tag 唯一id
  18. view1.tag = ;
  19.  
  20. // 通过tag值查找view(在父视图上查找)
  21. NSLog(@"%@", [self.window viewWithTag:]);

 5> 父视图 和 子视图

  使用 addSubview: 添加视图,要确定添加到谁上面。

  被添加的视图称为子视图 , 添加到的视图称为父视图。

 6> 添加视图

  1. // 同一个父视图上,指定位置插入子视图
  2. [view2 insertSubview:view4 atIndex:];
  3.  
  4. // 同一父视图上,将一个视图添加到另一个视图的上面
  5. [view2 insertSubview:view5 aboveSubview:view4];
  6.  
  7. // 同一父视图上,将一个视图添加到另一个视图的下面
  8. [view2 insertSubview:view3 belowSubview:view5];

 7> 修改视图的层次关系

  1. // 把指定的子视图移动到最前面
  2. [view2 bringSubviewToFront:view4];
  3.  
  4. // 把子视图移动到最后面
  5. [view2 sendSubviewToBack:view4];
  6.  
  7. // 交换两个指定索引位置的子视图
  8. [view2 exchangeSubviewAtIndex: withSubviewAtIndex:];
  9.  
  10. // 把子视图从父视图移除
  11. [view4 removeFromSuperview];

 8> frame和bounds的区别

frame : 根据父视图坐标系来确定自己的位置

   bounds : 该视图在自己坐标系的位置和大小

修改bounds并不会引起视图位置的变化 ,会影响自身子视图的位置

修改frame会引起视图位置的变化

3. 应用程序启动流程

 1>main函数

  任何一个程序,无论是基于Mac OS还是iOS,程序都是从main.m 文件的main函数开始执行的。

  1. #import <UIKit/UIKit.h>
  2. #import "AppDelegate.h"
  3.  
  4. int main(int argc, char * argv[]) {
  5. @autoreleasepool {
  6. return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
  7. }
  8. }

 2> UIApplicationMain

  UIApplicationMain在程序入口函数main函数中调用,主要实现了3个功能:

   ① 创建应用程序(UIApplication)实例

   ② 创建应用程序代理(AppDelegate)实例

   ③ 建立事件循环(runloop:死循环,不断检测程序运行状态,是否被触摸、晃动等)

 3> UIApplicationMain参数

  1. int UIApplicationMain (
  2. int argc,
  3. char *argv[],
  4. NSString *principalClassName,
  5. NSString *delegateClassName
  6. );

  principalClassName:应用程序对象的类名(UIApplication或其子类)

  delegateClassName:应用程序delegate的类名(任何接受了UIApplicationDelegate的类)

  UIApplicationMain根据上述两个类名创建应用程序实例、应用程序代理实例。然后建立事件循环 (runloop),检测程序的各种事件 (程序开始启动,接收到触摸等等)

 4> 应用程序代理

  ① 应用程序代理作用,根据应用程序传递过来的状态做出相应的处理。

   ② 应用程序的状态有很多,比如:程序启动、进入活跃状态、进到后台、内存警告、收到远程消息等等。

   ③ 任何接受了UIApplicationDelegate协议的对象都可以成为应用程序代理。

  ④ 一旦应用程序的某种状态触发,就会执行相应的代理方法。

iOS学习20之UIView的更多相关文章

  1. iOS 学习 - 20 UICollectionView 移动 Item ,类似背包

    有100个 item,数据源只有20个,只能在 20 个之间移动,防止 item 复用,出现 bug 方法一:苹果自带 //UICollectionViewDataSource- (BOOL)coll ...

  2. iOS学习--详解UIView的 contentStretch属性

    通过实例和图片理解UIView的contentStretch属性 方法 通过一个图片建立一个简单的UIImageView 设置它的contentStretch属性 修改它的frame属性 观察 测试用 ...

  3. iOS 杂笔-20(UIView和CALayer的区别与联系)

    iOS 杂笔-20(UIView和CALayer的区别与联系) 每个 UIView 内部都有一个 CALayer 在背后提供内容的绘制和显示,并且 UIView 的尺寸样式都由内部的 Layer 所提 ...

  4. iOS学习——UIView的研究

    在iOS开发中,我们知道有一个共同的基类——NSObject,但是对于界面视图而言,UIView是非常重要的一个类,UIView是很多视图控件的基类,因此,对于UIView的学习闲的非常有必要.在iO ...

  5. iOS学习笔记-精华整理

    iOS学习笔记总结整理 一.内存管理情况 1- autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象.当用户的代码运行告一段 落,开始 ...

  6. iOS学习笔记-自己动手写RESideMenu

    代码地址如下:http://www.demodashi.com/demo/11683.html 很多app都实现了类似RESideMenu的效果,RESideMenu是Github上面一个stars数 ...

  7. iOS学习笔记20-地图(二)MapKit框架

    一.地图开发介绍 从iOS6.0开始地图数据不再由谷歌驱动,而是改用自家地图,当然在国内它的数据是由高德地图提供的. 在iOS中进行地图开发主要有三种方式: 利用MapKit框架进行地图开发,利用这种 ...

  8. iOS学习-压缩图片(改变图片的宽高)

    压缩图片,图片的大小与我们期望的宽高不一致时,我们可以将其处理为我们想要的宽高. 传入想要修改的图片,以及新的尺寸 -(UIImage*)imageWithImage:(UIImage*)image ...

  9. 【原】iOS学习之事件处理的原理

    在iOS学习23之事件处理中,小编详细的介绍了事件处理,在这里小编叙述一下它的相关原理 1.UITouch对象 在触摸事件的处理方法中都会有一个存放着UITouch对象的集合,这个参数有什么用呢? ( ...

随机推荐

  1. 原始套接字SOCK_RAW

    原始套接字SOCK_RAW 实际上,我们常用的网络编程都是在应用层的报文的收发操作,也就是大多数程序员接触到的流式套接字(SOCK_STREAM)和数据包式套接字(SOCK_DGRAM).而这些数据包 ...

  2. 在Linux中安装JDK的步骤

    相信不少学习Java的朋友都在Windows操作系统中安装过JDK,这里就不对JDK做详细的介绍了. 在Windows下安装JDK可参考:JDK的安装和配置 1.下载JDK 我们可以去官网(http: ...

  3. Loadrunner之API测试

    //API函数 web_submit_data web_custom_request   //支持https请求 web_set_sockets_option("SSL_VERSION&qu ...

  4. Redis笔记(五)Redis的事务

    >>关系型数据库的事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消. Atomic(原子性): 一个事务(transaction)中的 ...

  5. 图结构练习——最短路径(floyd算法(弗洛伊德))

    图结构练习——最短路径 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述  给定一个带权无向图,求节点1到节点n的最短路径.   输 ...

  6. js正则表达式:验证邮箱格式、密码复杂度、手机号码、QQ号码

    直接上代码             Java   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ...

  7. <jsp:include>和<%@include file=""%>区别【131031】

    <jsp:include page=""> 父页面和包含进来的页面单独编译,单独翻译成servlet后,在前台拼成一个HTML页面. <%@include fil ...

  8. hdu 1851 尼姆+巴什博弈

    先在每堆中进行巴什博弈,然后尼姆 #include<stdio.h> int main() { int T; int i,n; int ans,m,l; scanf("%d&qu ...

  9. Ubuntu下配置samba实现文件夹共享

    转自:http://www.cnblogs.com/phinecos/archive/2009/06/06/1497717.html 一. samba的安装: sudo apt-get insall  ...

  10. maven项目Tomcat controller 404

    今天使用tomcat7.0.54启动现有的maven项目,可以正常启动,但是自己所写的所有的@controller注解的请求都报出了404的错误,在网上查了好久也很少找到这个问题,各种方法都尝试了也没 ...