[UI基础]第1天

1.学前须知

1.1  iOS开发需要学习哪些内容nbsp;  

1.2   谨记一条软件开发定律:万物皆对象!

        一张图片是一个UIImageView对象

        一段文字是一个UILabel对象

        一只按钮是一个UIButton对象 ……

        因此,搭建UI界面的过程极其简单 利用类创建对象 将对象显示到屏幕上 比如,如果要显示5个按钮 用UIButton类创建5个UIButton对象 将这5个UIButton对象显示到屏幕上

1.3  如何开发功能强大的移动应用/h1>

        为了方便开发者开发出强大的功能,苹果提供了各种各样的框架

        UIKit:创建和管理应用程序的用户界面

        QuartzCore:提供动画特效以及通过硬件进行渲染的能力

        CoreGraphics:提供2D绘制的基于C的API

        CoreLocation:使用GPS和WIFI获取位置信息

        MapKit:为应用程序提供内嵌地图的接口

        AVFoundation:音频、视频处理 ……

        在开发过程中需要用到一些特殊功能时,可以先尝试使用系统自带的框架

1.3.1 UIKit框架

                顾名思义,UIKit框架是跟UI有关系的

                诸如前面所述的界面元素(如UIImageView),都是封装在UIKit框架内部的

                UIKit框架中提供了丰富多彩的可视化组件元素:

(点击)

XCODE10.1需要点上面的按钮打开控件选择界面 

                利用UIKit框架提供的类来创建各种可视化组件对象,最后组成复杂而美观的UI界面

                UIKit没学好,相当于iOS白学了        

2.第一个IOS程序

2.0    创建一个IOS工程

 

其他的就跟OC时创建工程是一样的。 

 这里选择模拟器的类型。

这里选择屏幕大小

2.1    简介

        初学iOS开发,研究的程序不要过于复杂,应该从最基本的开始

        大房子都是由小砖一块一块堆成的,而大型App是由无数个小程序段组成的

        实现一个简单的“加法计算器”,作为第一个iOS程序

        分析可得,至少需要开发步骤:

        1).添加需要的控件,搭建UI界面:1个按钮、3个文本标签、2个文本输入框

        2).监听按钮的点击事件

        3).取得2个文本框值,将计算好的最终结果显示到右边的文本标签上

        **注意:模拟器下无法调出键盘时,使用command + K键调出键盘。

       需要掌握内容:

  • 往storyboard中添加控件
  • UIViewController和UIView的关系
  • 程序的运行过程
  • IBAction、IBOutlet的作用
  • 如何监听控件的事件(比如按钮的点击事件)
  • 父控件和子控件的概念
  • 退出键盘

2.2    Storyboard文件

左边的箭头表明:程序一启动就会显示箭头所指的界面

2.3 常见UI控件

2.3.1        UILabel – 文本标签

        文本标签的作用是显示一串固定的文字

2.3.2   UIButton – 按钮

        按钮的作用是:监听用户的点击事件,在用户点击后做出响应  

2.3.3  UITextField – 文本输入框

        文本输入框可以弹出键盘,让用户输入文本内容

 2.4  view和viewController

 2.4.1 UIView

  •  屏幕上能看得见摸得着的东西就是UIView,比如屏幕上的按钮、文字、图片
  • 一般翻译叫做:视图控件组件
  • UIButton、UILabel、UITextField都继承自UIView
  • 每一个UIView都是一个容器,能容纳其他UIView(比如右图中的整个键盘是一个UIView,里面容纳很多小格子的数字UIView)

2.4.2 父控件和子控件

  • 在“加法计算器”中,最后面那块白色的全屏的东西也是一个UIView
  • 白色的大UIView中容纳了很多小的UIView,视图层次结构如下图所示

2.4.3  UIViewController

        手机上自带的“设置”中有很多的界面,点击对应的选项可以跳到下一个界面

 每一个新的界面都是一个新的UIView,在切换过程中,涉及到了:

  1. UIView的创建和销毁
  2. UIView跟用户的交互(处理UIView内部每一行的点击)
  • 其实,每当显示一个新界面时,首先会创建一个新的UIViewController对象,然后创建一个对应的全屏UIView,UIViewController负责管理这个UIView
  • UIViewController就是UIView的大管家,负责创建、显示、销毁UIView,负责监听UIView内部的事件,负责处理UIView与用户的交互
  • UIViewController内部有个UIView属性,就是它负责管理的UIView对象 :

        UIView与UIViewController的关系 

  • UIView只负责对数据的展示,采集用户的输入、监听用户的事件等。
  • 其他的操作比如:每个UIView的创建、销毁、用户触发某个事件后的事件处理程序等这些都交给UIViewController来处理。

严格来讲,下图箭头所指的应该是一个UIViewController对象,里面白色的界面仅仅是UIViewController内部的UIView属性

 加法计算器程序的运行流程

 综合分析,可以得出程序的简单运行流程: 

  1. 读取Main.storyboard文件
  2. 创建的CZViewController对象
  3. 根据storyboard文件中描述创建CZViewController的UIView对象
  4. 将UIView对象显示到用户眼前

2.5 监听按钮的点击

  • 现在已经知道:应该由CZViewController来监听“计算”按钮的点击
  • 换句话说,CZViewController应该提供一个方法出来(或者说有这么一个功能),当用户点击“计算”按钮时,就调用这个方法来通知CZViewController按钮被人点了
  • CZViewController就在这个方法中实现想做的任何事情,比如计算2个文本输入框内值的和

2.6 补充问题

  • IBAction和IBOutlet究竟有什么作用/li>
  • 还有其他拖线方式么/li>
  • Storyboard文件中箭头的含义/li>
  • 如何更换storyboard文件/li>
  • 如何让文本框只能输入数字/li>
  • 如何退出键盘/li>
  • Company Identifier和Bundle Identifier的作用
  • 模拟器还有哪些功能/li>

2.6.1 IBAction和IBOutlet究竟有什么作用/h3>

        IBAction相当于void,但是能拖线。IBOutlet私有属性可以拖线。

        IBAction和IBOutlet

        IBAction

        从返回值角度上看作用相当于void

        只有返回值声明为IBAction的方法,才能跟storyboard中的控件进行连线

        IBOutlet

        只有声明为IBOutlet的属性,才能跟storyboard中的控件进行连线

        

2.6.2  还有其他拖线方式么/h3>
  1. 点击控件右键连线
  2. 按住control拖线(从控件到代码、从代码到控件)
  3. 属性与方法代码写好后,打开View Controller Scene,选择View Controller右键将对应的方法拖到控件上。

2.6.4  Storyboard文件中箭头的含义这个新版xcode中没找到

        程序的入口.新建一个ViewController后,设置Is Initial View Controller属性来让当前View Controller为默认启动项。

2.6.5    如何更换storyboard文件/h3>

        项目 ->  General -> Deployment Info -> 改变Main.storyboard

2.6.6   如何让文本框只能输入数字/h3>

        调出数字键盘(Number Pad)

2.6.7   如何退出键盘/h3>

开发人员自己写代码退出。

1.[第一响应者 resignFirstResponder];

  • resignFirstResponder
  • 当叫出键盘的那个控件(第一响应者)调用这个方法时,就能退出键盘

2. [self.view endEditting:YES])

  • endEditing
  • 只要调用这个方法的控件内部存在第一响应者,就能退出键盘

2.6.8  Company Identifier和Bundle Identifier的作用

  • Company Identifier:公司的唯一标识
  • Bundle Identifier:app的唯一标识
  • Bundle Identifier对于中文都是-

2.6.9  模拟器还有哪些功能/h3>
  1. 查看模拟器的菜单。
  2. window 菜单调整大小
  3. 调试 设置位置 硬件 ->
  4. 设备 来切换模拟器、旋转等
  5. 回到主界面、退出某个程序、卸载某个程序

2.7  设置程序启动时加载的storyboard

这个设置表明:程序启动时会加载Main.storyboard

2.8 设置UITextField的键盘类型

2.9  常见问题 

        1.拖线后@property代码、事件处理方法被删除了。

                错误信息:This class is not key value coding-compliant for the key resultLabel.

        2.引用控件的属性、事件处理方法都写在.m文件的“类扩展”,保证封装性。

3.0 控件的常见属性

在程序运行过程中,经常需要去修改(更新) UI 控件的显示状态,比如: 文件下载过程中,实时更新下载进度、 音乐播放过程中,实时更新播放进度

 

 如何修改控件的状态呢法很简单:

  • 每一个UI控件都是一个对象
  • 修改UI控件的状态,其实就是修改控件对象的属性
  • 比如修改UILabel显示的文字,就修改UILabel对象的text属性即可
  • 比如修改UIImageView显示的图片,就修改UIImageView对象的image属性即可

不难想到,每一个UI控件肯定都有很多属性,比如:

  • UIProgressView进度条控件有progress属性(进度值)
  • UILabel和UITextField都有text属性(显示文字)
  • ……

虽然,每一个UI控件都有自己的独特属性,但是有些属性是每个UI控件都具备的,比如每一个UI控件都有自己的位置和尺寸、都有自己的父控件、子控件。于是,所有的UI控件最终都继承自UIView,UI控件的公共属性都定义在UIView中,比如:

  • frame :位置和尺寸
  • center :中心点位置
  • ……

控件所在矩形框在父控件中的位置和尺寸(以父控件的左上角为坐标原点)
可以定义控件的位置(origin)和大小(size)

控件所在矩形框的位置和尺寸(以自己左上角为坐标原点,所以bounds的x、y一般为0)
可以定义控件的大小(size)

控件中点的位置(以父控件的左上角为坐标原点)
可以定义控件的位置(center)
在UIKit中,坐标系的原点(00)在左上角,x值向右正向延伸,y值向下正向延伸 

添加一个子控件view

从父控件中移除

根据一个tag标识找出对应的控件(一般都是子控件)

4.0 什么是按钮

  • UIKit框架提供了非常多的UI控件,但并不是每一个都很常用,有些控件可能1年内都用不上,有些控件天天用,比如UIButton、UILabel、UIImageView、UITableView等等
  • 现在就先来学习非常重要且比较基础的一个UI控件—UIButton,俗称“按钮”
  • 一般情况下,点击某个控件后,会做出相应反应的都是按钮
  • 按钮的功能比较多,既能显示文字,又能显示图片,还能随时调整内部图片和文字的位置
     

       4.1 接下来通过一个小案例来研究按钮的基本使用

        

 

4.1.1        功能分析

  1. 左下角4个方向按钮,控制头像按钮的位置
  2. 右下角分别是放大、缩小按钮,控制头像的尺寸
  3. 头像按钮既有背景图片,又有文字

4.1.2        步骤分析

  1. 搭建UI界面
  2. 监听按钮点击
  3. 修改头像按钮的属性来调整位置和尺寸
     

4.1.3        掌握

  • 使用代码创建、添加控件
  • 分别通过 storyboard 和代码设置按钮在不同状态的背景、文字、文字颜色
  • 分别通过 storyboard 和代码监听按钮点击
  • 修改控件的位置和尺寸
  • 制作简单的动画效果
  • 掌握frame(包含位置和大小)、center(只能修改位置)、bounds(只能修改大小)、transform的使用
     

4.1.4 基本操作

添加项目中用到的图片到Images.xcassets中( 新版XCODE叫Images.xcassets)

下图是在设置控件的尺寸为35×35 

 

 

  • 如果发现通过代码无法修改控件的位置或者尺寸时,应该去掉storyboard里面的autolayout功能,这是自iOS6开始出现的特性
  • 顾名思义,autolayout是用来自动布局的,用来束缚控件的位置和尺寸。去掉这个功能,控件的位置和尺寸就不再有一些固定的束缚。

 

通过修改控件的 frame 属性就可以修改控件在屏幕上的位置和尺寸 比如点击“向上”按钮,让按钮的 y 值减小即可

下面代码是 错误 的, OC 语法规定: 不允许直接修改对 象的结构体属性的成员

        self.headBtn.frame.origin.y -= 10;

代码重构

将上、下、左、右四个按钮都绑定到同一个 move 方法上,通过参数的不同判断应该如何移动。 通过参数对象的 tag 属性判断当前是哪个按钮点击的。

通过centerbounds实现移动缩放

1 、通过 center 实现上、下、左、右移动。 2 、通过 bounds 实现缩放。

简单总结

frame : 能修改位置和尺寸。(全能) center : 能修改位置 bounds: 能修改尺寸(一般 x y 都是 0

代码创建按钮

在开发过程中,并不是每次都通过 storyboard 拖控件完成 UI 界面,因为 storyboard 上面的界面是“固定死”的,有时候可能会在程序运行过程中动态地添加一些新的控件到界面上 比如 QQ 的聊天信息,是有人发出一条信息后才动态显示出来的。因此,需要掌握如何用代码动态地添加控件 实际上, storyboard 的本质就是根据图形界面描述转成相应的代码

 实现简单动画

在iOS开发中,想实现一些小动画是非常容易的

  • 系统会根据某个属性值的改变自动形成动画
  • 比如x值本来是10,然后x值突然改为了100,系统会通过平移动画的方式让x值慢慢从10变到100

简易动画大致有2种方式:

头尾式

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年4月26日
下一篇 2022年4月26日

相关推荐