iOS学习20之UIView
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.创建UIWindow对象,并设置为屏幕的大小
// [UIScreen mainScreen].bounds 获取屏幕的大小
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; // 2.给window设置背景的颜色(白色)
self.window.backgroundColor = [UIColor whiteColor]; // 3.使window显示
// makeKeyAndVisible 将窗口设为主窗口并显示
[self.window makeKeyAndVisible]; // 4.为window设置根视图控制器(XCode7.0之后必须写)
// 创建视图控制器对象
ViewController *VC = [[ViewController alloc] init]; // 把VC设置为window的根视图控制器
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常用属性
// center 中心点
view1.center = self.window.center; // 设置view1居中
NSLog(@"x = %.2f, y = %.2f", view1.center.x, view1.center.y); // alpha 视图的透明度
view1.alpha = 0.9; // hidden
view1.hidden = NO; // superview
NSLog(@"%@", view1.superview); // subviews
NSLog(@"%@", self.window.subviews); // tag 唯一id
view1.tag = ; // 通过tag值查找view(在父视图上查找)
NSLog(@"%@", [self.window viewWithTag:]);
5> 父视图 和 子视图
使用 addSubview: 添加视图,要确定添加到谁上面。
被添加的视图称为子视图 , 添加到的视图称为父视图。
6> 添加视图
// 同一个父视图上,指定位置插入子视图
[view2 insertSubview:view4 atIndex:]; // 同一父视图上,将一个视图添加到另一个视图的上面
[view2 insertSubview:view5 aboveSubview:view4]; // 同一父视图上,将一个视图添加到另一个视图的下面
[view2 insertSubview:view3 belowSubview:view5];
7> 修改视图的层次关系
// 把指定的子视图移动到最前面
[view2 bringSubviewToFront:view4]; // 把子视图移动到最后面
[view2 sendSubviewToBack:view4]; // 交换两个指定索引位置的子视图
[view2 exchangeSubviewAtIndex: withSubviewAtIndex:]; // 把子视图从父视图移除
[view4 removeFromSuperview];
8> frame和bounds的区别
frame : 根据父视图坐标系来确定自己的位置
bounds : 该视图在自己坐标系的位置和大小
修改bounds并不会引起视图位置的变化 ,会影响自身子视图的位置
修改frame会引起视图位置的变化
3. 应用程序启动流程
1>main函数
任何一个程序,无论是基于Mac OS还是iOS,程序都是从main.m 文件的main函数开始执行的。
#import <UIKit/UIKit.h>
#import "AppDelegate.h" int main(int argc, char * argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
2> UIApplicationMain
UIApplicationMain在程序入口函数main函数中调用,主要实现了3个功能:
① 创建应用程序(UIApplication)实例
② 创建应用程序代理(AppDelegate)实例
③ 建立事件循环(runloop:死循环,不断检测程序运行状态,是否被触摸、晃动等)
3> UIApplicationMain参数
int UIApplicationMain (
int argc,
char *argv[],
NSString *principalClassName,
NSString *delegateClassName
);
principalClassName:应用程序对象的类名(UIApplication或其子类)
delegateClassName:应用程序delegate的类名(任何接受了UIApplicationDelegate的类)
UIApplicationMain根据上述两个类名创建应用程序实例、应用程序代理实例。然后建立事件循环 (runloop),检测程序的各种事件 (程序开始启动,接收到触摸等等)
4> 应用程序代理
① 应用程序代理作用,根据应用程序传递过来的状态做出相应的处理。
② 应用程序的状态有很多,比如:程序启动、进入活跃状态、进到后台、内存警告、收到远程消息等等。
③ 任何接受了UIApplicationDelegate协议的对象都可以成为应用程序代理。
④ 一旦应用程序的某种状态触发,就会执行相应的代理方法。
iOS学习20之UIView的更多相关文章
- iOS 学习 - 20 UICollectionView 移动 Item ,类似背包
有100个 item,数据源只有20个,只能在 20 个之间移动,防止 item 复用,出现 bug 方法一:苹果自带 //UICollectionViewDataSource- (BOOL)coll ...
- iOS学习--详解UIView的 contentStretch属性
通过实例和图片理解UIView的contentStretch属性 方法 通过一个图片建立一个简单的UIImageView 设置它的contentStretch属性 修改它的frame属性 观察 测试用 ...
- iOS 杂笔-20(UIView和CALayer的区别与联系)
iOS 杂笔-20(UIView和CALayer的区别与联系) 每个 UIView 内部都有一个 CALayer 在背后提供内容的绘制和显示,并且 UIView 的尺寸样式都由内部的 Layer 所提 ...
- iOS学习——UIView的研究
在iOS开发中,我们知道有一个共同的基类——NSObject,但是对于界面视图而言,UIView是非常重要的一个类,UIView是很多视图控件的基类,因此,对于UIView的学习闲的非常有必要.在iO ...
- iOS学习笔记-精华整理
iOS学习笔记总结整理 一.内存管理情况 1- autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象.当用户的代码运行告一段 落,开始 ...
- iOS学习笔记-自己动手写RESideMenu
代码地址如下:http://www.demodashi.com/demo/11683.html 很多app都实现了类似RESideMenu的效果,RESideMenu是Github上面一个stars数 ...
- iOS学习笔记20-地图(二)MapKit框架
一.地图开发介绍 从iOS6.0开始地图数据不再由谷歌驱动,而是改用自家地图,当然在国内它的数据是由高德地图提供的. 在iOS中进行地图开发主要有三种方式: 利用MapKit框架进行地图开发,利用这种 ...
- iOS学习-压缩图片(改变图片的宽高)
压缩图片,图片的大小与我们期望的宽高不一致时,我们可以将其处理为我们想要的宽高. 传入想要修改的图片,以及新的尺寸 -(UIImage*)imageWithImage:(UIImage*)image ...
- 【原】iOS学习之事件处理的原理
在iOS学习23之事件处理中,小编详细的介绍了事件处理,在这里小编叙述一下它的相关原理 1.UITouch对象 在触摸事件的处理方法中都会有一个存放着UITouch对象的集合,这个参数有什么用呢? ( ...
随机推荐
- poj1456(贪心+并查集)
题目链接: http://poj.org/problem?id=1456 题意: 有n个商品, 已知每个商品的价格和销售截止日期, 每销售一件商品需要花费一天, 即一天只能销售一件商品, 问最多能买多 ...
- 对Java内存模型即JMM的理解
类似物理上的计算机系统,Java虚拟机规范中也定义了一种Java内存模型,即Java Memory Model(JMM),来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能 ...
- SQL——触发器——插入触发器——边学边项目写的。
需求: 项目表项目编码触发器编写 为项目表DwProject编写触发器,目的为当创建新项目时,且ProjectNo 为Null或空字符串时,自动创建项目编号,编号格式为4位年号,2位月份,2位顺序号, ...
- penghui_031413 Bat命令学习
penghui_031413 Bat命令学习 基础部分:====================================================================== ...
- CocoaPods安装和使用教程(转摘)
Code4App 原创文章.转载请注明出处:http://code4app.com/article/cocoapods-install-usage 目录 CocoaPods是什么? 如何下载和安装Co ...
- IBM AppScan 安全扫描:加密会话(SSL)Cookie 中缺少 Secure 属性 处理办法 分类: 数据安全 2014-06-28 11:35 2805人阅读 评论(0) 收藏
问题描述: 原因分析: 服务器开启了Https时,cookie的Secure属性应设为true: 解决办法: 1.服务器配置Https SSL方式,参考:https://support.micro ...
- Oracle 【IT实验室】数据库备份与恢复之一:exp/imp(导出与导入&装库与卸库)
1.1 基本命令 1. 获取帮助 $ exp help=y $ imp help=y 2. 三种工作方式 (1)交互式方式 $ exp // 然后按提示输入所需要的参数 ...
- bootstrap 练习
bookList.html <!DOCTYPE html> <html lang="zh-cn"> <head> <!-- 父路径 --& ...
- PHP5中使用PDO连接数据库的方法
PDO(PHP Data Object) 是PHP 中加入的东西,是PHP 5新加入的一个重大功能,因为在PHP 5以前的php4/php3都是一堆的数据库扩展来跟各个数据库的连接和处理,php_my ...
- Visual Studio Code升级到0.5,提供对ES6的更好支持
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:题目即题记. 自从Visual Studio Code发布之后(最初是0.1),微软就 ...