iOS学习20之UIView

1. UI编程概述

 UI的本意是用户界面,是英文 UserInterface 的缩写。

 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 = 101;
19     
20     // 通过tag值查找view(在父视图上查找)
21     NSLog(@"%@", [self.window viewWithTag:101]);

 5> 父视图 和 子视图

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

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

 6> 添加视图

1     // 同一个父视图上,指定位置插入子视图
2     [view2 insertSubview:view4 atIndex:0];
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:2 withSubviewAtIndex:1];
 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协议的对象都可以成为应用程序代理。

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

 

posted @ 2016-04-05 19:48  墨隐于非  阅读(364)  评论(2编辑  收藏  举报