视图编程入门

===================

iOS概述              

===================

1.1.1 什么是iOS

iOS是由苹果公司开发的移动操作系统。苹果最早于2007年1月9日的Macworld大会上公布这个系统,原本这个系统名为iPhone OS,因为iPad,iPhone,iPod touch都使用iPhone OS,所以2010WWDC大会上宣布改名为iOS。

 

【问】什么是UI?

【答】UI全程User Interface(用户接口)通过UI我们和程序进行交互,传入我们的请求,反馈运行的结果。如果仅限于iOS程序,看得见摸得着的都是UI

推荐的书:《UIKit框架详解》

 

几个相关术语: 

- UI: User Interface (用户界面/接口) 

- App: Application (应用程序) 

- API:Application Programming Interface (应用程序编程接口)

 

1.1.2 iOS的发展史

2007年10 iPhone应用程序开发包SDK发布

2008年3月 iPhone runs OS X改名iPhone OS

2009年3月 iOS 3发布

2010年6月 iOS 4发布

2011年6月 iOS 5发布

2012年6月 iOS 6发布

2013年6月 iOS 7发布

2014年6月 iOS 8发布

2015年9月 iOS 9发布

 

1.1.3 CocoaTouch中常用的framework

iOS系统架构可以分为如下图所示的4层,CocoaTouch框架的地位不言而喻。

 

 

说明:

CocoaTouch Layer(可触摸层):该框架基于iOS应用层直接调用层,如触摸事件、照相管理等,该层包含UIKit框架和Foundation框架。

Media Layer(媒体层):该层框架和服务依赖Core Services层,向CocoaTouch层提供画图和多媒体服务,如声音、图片、视频等。

Core Services Layer(核心服务层): 提供核心服务,例如字符串处理函数、集合管理、网络管理、URL处理工具、联系人维护、偏好设置等。

Core  OS Layer(核心操作系统层):包含核心部分、文件系统、网络基础、安全特性、能量管理和一些设备驱动,还有一些系统级别的API。

 

在CocoaTouch层中很多技术都是基于Objective-C语言的。Objective-C语言为iOS提供了像集合、文件管理、网络操作等支持。像UIKit框架,它为应用程序提供了各种可视化组件,比如像窗口(Window)、视图(View)和按钮组件(UIButton)。Cocoa Touch层中的其他框架,对我们在应用程序中的开发来说也是非常有用的,如访问用户通信录功能框架、获取照片信息功能的框架、负责加速感应器和三维陀螺仪等硬件支持的框架。

 

UIKit继承结构

 

 

实现App开发中的用户界面首先要从UIResponder及其子类开始研究,当然整个过程会覆盖整个UIKit框架,比如UIColor(颜色)、UIEvent(事件)、UIFont(字体)、UIGestureRecognizer(手势识别)、UIImage(图像)、UIScreen(屏幕)等诸多内容。

 

===================

iOS开发入门             

===================

1.2.1 Xcode如何建立第一个UI项目

启动Xcode在欢迎页中选择"Create a new Xcode project"。在项目创建向导中选择iOS->Application->Single View Application然后点击下一步。接下来需要设置项目名称、组织名称、组织标识、开发语言(OC或Swift)和设备(iPhone、iPad或Universal)。下一步之后选择项目的位置就可以点击"Create"完成项目创建了。

 

Product Name :项目名称

Organization Name : 组织名  

Organization Identifier: 组织标识

Bundle Identifier : 

Language : 开发语言

Devices : 设备

 

熟悉Xcode

 

XCode的上方是工具栏,有很多工具按钮。

  Xcode的左侧是导航区域,包括:

项目导航 Command+1 包含项目所有的文件

符号导航 Command+2 集中了所有的工作区中定义的符号

搜索导航 Command+3 对工作区中的所有文件执行搜索

问题导航 Command+4 构建项目过程中出现的任何错误和警告都会在这里出现

测试导航 Command+5 测试程序导航

调试导航 Command+6 进入调试过程的主视图

断点导航 Command+7 查看设置的所有断点

日志导航 Command+8 保留开发人员最近的构建结果和运行日志的历史记录

 

1.2.2 为什么要使用空模板

选择应用的类型其实是选择一个项目模板,让Xcode帮你完成一些繁琐的工作,如果使用Xcode 5,我们建议初学者选择Empty Application,从零开始做一个项目更有助于我们理解代码的工作原理,真正做开发的时候可以选择写代码或者使用可视化的设计器(storyboard或xib),看你所在的公司有怎样的要求。

 

1.2.3 项目的目录结构介绍

NewHelloWorld 包含编写的大部分代码以及组成应用程序界面的文件

Supporting Files     包含所需要的非oc类的源代码文件和资源文件

Frameworks           特殊的库,也包含图像和声音文件等资源

Products   包含项目构件时所生成的应用程序

 

文件模板库(file template library)--包含一些文件模板。

代码片段库(code snippet library)--包含一些代码片段。

对象库(object library)--包含各种可重用对象。

媒体库(media library)--包括用户所有的媒体文件。

 

1.2.4 Xcode中常用的快捷键的使用

Xcode

CMD+R 运行

CMD+B 组建(编译+连接)

CMD+. 停止程序

CMD+鼠标左键 (点进去)

CMD+下 文件尾

CMD+上 文件头

CTRL+CMD+上 切换头文件和实现文件

CMD+/ 注释代码

CMD+A全选

CTRL+I 代码格式化(自动缩进)

CMD+[ 左缩进

CMD+] 右缩进

CMD+N 新建文件

CMD+SHIFT+N 新建项目

 

模拟器

SHIFT+CMD+H 回到桌面

CMD+1/2/3 调整大小

CMD+左右方向 调整模拟器的方向

CMD+H 隐藏模拟器

CMD+Q 退出模拟器

CMD+S 模拟器截屏(都在桌面上)

 

屏幕截图

CMD+SHIFT+3 全屏截图(都在桌面上)

CMD+SHIFT+4 区域截图(都在桌面上)

 

===================

第一个iOS项目            

===================

1.3.1 讲解应用程序的生命周期函数

可以在项目导航中看到整个项目包含的文件,打开Supporting Files文件夹可以看到一个main.m文件,里面有大家非常熟悉的main函数。C和Objective-C(以后简称OC)程序的入口都是main函数,iOS应用的入口当然也是main函数,只不过main函数风骚的打了酱油,仅仅去调用了一个叫做UIApplicationMain的函数。UIApplicationMain函数会创建一个UIApplication的对象。每个iOS应用都有且仅有一个UIApplication对象,该对象的作用是维护一个消息循环,监听应用程序的各种事件并执行相应地回调方法(callback method)。回调是一种常见的编程模式,当我们知道一件事情发生的时候要做什么,但是并不知道这件事情什么时候会发生就会用到回调的编程模式,注册一系列的回调方法,当事件发生时通过委托的对象调用这些方法。

#import <UIKit/UIKit.h>

#import "AppDelegate.h"

 

int main(int argc, char * argv[]) {

    @autoreleasepool {

        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));

    }

}

说明:UIApplicationMain方法的四个参数,其中前两个是main方法的命令行参数,第三个参数表是UIApplication类或其子类的名字,UIApplication对象会启动一个事件监听的循环监听各种事件,然后通过委托的方式处理这些事件,而第四个参数正好是一个应用程序委托类的名字。

  AppDelegate类的代码如下所示:

  头文件

#import <UIKit/UIKit.h>

 

@interface AppDelegate : UIResponder <UIApplicationDelegate>

 

@property (strong, nonatomic) UIWindow *window;

 

@end

  源文件

@implementation AppDelegate

 

 

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

    // 应用程序加载完成

    return YES;

}

 

- (void)applicationWillResignActive:(UIApplication *)application {

    // 应用即将置于后台

}

 

- (void)applicationDidEnterBackground:(UIApplication *)application {

    // 应用已经置于后台

}

 

- (void)applicationWillEnterForeground:(UIApplication *)application {

    // 应用即将置于前台

}

 

- (void)applicationDidBecomeActive:(UIApplication *)application {

    // 应用已经进入前台

}

 

- (void)applicationWillTerminate:(UIApplication *)application {

    // 应用即将终止

}

 

@end

 

1.3.2 简单介绍如何从main函数跳转到AppDelegate

 

 

1.3.3 详细介绍iOS的坐标体系

屏幕左上角是坐标原点,横向是X轴的正向,纵向是Y轴的正向,状态栏从Y=0到Y=20处。

 

屏幕尺寸如下表所示:

 

设备

屏幕尺寸

分辨率

坐标点

iPhone 3和3s

3.5英寸

320*480

320*480

iPhone 4和4s(支持Retina)

3.5英寸

640*960

320*480

iPhone 5和5s(支持Retina)

4英寸

640*1136

320*568

iPhone 6

4.7英寸

750*1334

375*667

iPhone 6 Plus

5.5英寸

1080*1920

414*736

iPad 1和2(不支持Retina)

9.7

768*1024

768*1024

iPad 3和4(支持Retina)

9.7

1536*2048

768*1024

iPad Air

9.7

1536*2048

768*1024

iPad Mini(不支持Retina)

7.9

768*1024

768*1024

iPad Mini2(支持Retina)

7.9

1536*2048

768*1024

 

1.3.4 窗体的作用

UIWindow相当于一个画框。它能够承载其他的视图对象(包括视图的子类对象),但通常情况下我们不会将所有的视图对象直接放在应用的窗口上,而是由一个或多个视图控制器对象(稍后介绍)来管理这些内容。

 

==============================

UIView和UIWindow(案例-FirstApp)            

==============================

1.一个应用程序(App)只有一个UIWindow的对象window

2.window必须得设置一个根视图控制器(主显示页面)

3.每一个试图控制器UIViewController都自带一个UIView

4.把某一个UIViewController设置成根视图控制器

 

注意!!!!

Xcode6以前的版本,可以直接把控件放到window上,但是

Xcdoe7以后完蛋了!必须window设置根视图控制器,把控件放到根视图控制器的UIView上

 

 

1.4.1 UIWindow呈现的原理

我们可以在刚才的AppDelegate.m文件中加入下面的代码。

// 应用程序加载完成时回调此方法

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

    // 创建窗口对象并设置其大小为屏幕大小

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

    // 设置窗口的背景色

    self.window.backgroundColor = [UIColor whiteColor];

    // 设置窗口对象为主窗口并且可见

    [self.window makeKeyAndVisible];

    return YES;

}

 

 

1.4.2 UIWindow和UIView的继承关系

貌似UIWindow是UIView的父类,按说,应该是先有窗口,再有视图,果真如此吗?

事实上,UIView是UIWindow的父类,有Apple的官方文档为证。如下图:

 

UIWindow继承自UIView,关于这一点可能有点逻辑障碍,画框怎么继承自画布呢?

视图怎么能继承窗口呢?虽说UIWindow继承UIView,但这个UIWindow也是一个重中之重的View。UIWindow虽说是个View,但它是首席View。

UIView定义了一个矩形区域以及操作这个矩形区域中内容的编程接口,除此之外UIView还要处理运行时区域中内容的交互行为(绘图、动画和事件处理)。从上面的图中我们也可以看出,我们要使用的控件都是UIView的子类型。视图会按层次结构排列,位于视图层次结构顶端的就是应用窗体。

  任何应用都有且仅有一个UIWindow对象,UIWindow对象就像一个容器,负责包含应用中的所有视图。应用需要在启动时创建并设置UIWindow对象,然后为其添加其他的视图,就像上面的代码呈现的那样。

  加入窗口的视图会成为该窗口的子视图。子视图也可以有自己的子视图从而构成一个以UIWindow作为根的视图层次结构(树形结构)。

 

1.4.3 UIView的基本属性和方法

  • frame属性:设置视图的坐标和尺寸
  • backgroundColor属性:设置视图的背景色
  • window属性:视图所在的窗口对象
  • addSubview方法:添加子视图

 

=================================

UILabel详解            

=================================

1.5.1 UILabel的使用场景

UILabel是一个视图类,即UIView的子类,在iOS程序中,看的见,摸得着的,都是UIView的子类。UILabel是标签视图,用于显示文字信息

 

1.5.2 UILabel的常用属性和常用方法

//访问文本属性

text 

font

textColor

textAlignment

lineBreakMode

enable

 

//对标签文本的大小

adjuestsFontSizeToFitWidth

baselineAdjustment

minimumFontSize

numberOfLines

 

//管理高亮值

highlightedTextColor

highlighted

 

//画阴影

shadowColor

shadowOffset

 

//图和定位覆盖

-textRectForBounds:limitedToNumberOfLines:

-drawTextInRect:

 

//设置和获取属性

userInteractionEnabled

tag

 

=================================

扩展            

=================================

1.UIApplication和UIApplicationDelegate的关系

1.UIApplication是程序的起始点,负责初始化和显示UIWindow

2.负责加载应用程序的第一个UIView到UIWindow中

3.帮助管理应用程序的生命周期

4.截收到的事件,转给委托UIApplicationDelegate来处理,此委托可以

   处理的事件包括:应用程序的生命周期、事件如程序启动和关闭、系统事件如来电等。

 

转载于:https://www.cnblogs.com/yuhanchen/p/5279253.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值