iOS复习记录日记01-从搭建出IOSUI最简单的计算器,到复杂的分布式服务端开发[2020]

iOS开发日记
现在是2020年3月26号. 因独立开发需要复习 以加深巩固.
我会将我复习 IOSUI开发知识 从基础到进阶 完全的记录下来.
这里会涉及到:从搭建出IOSUI最简单的计算器,到复杂的分布式服务端和微服务的独立开发.
记录下来从前端到后端的全程学习和/复习的过程.
今天是第一篇日记.我会从最简单的计算器日志开始写起.
-------------------------------------------------------------------------
开发环境:Xcode11,ios9或ios13任意版本全兼容适配,2020年3月26
需要深厚的c/objective-c编程经验或c++.毕竟日志是从UI写起来的.
另外,我是自学看黑马的视频进行复习的.有兴趣边看日志和视频.
---------------------------
UI复习前的鸡汤:
UI是值得深思熟虑的进行学习的.
UI是App的根基,要有好看的灵魂,也要有简洁的设计和审美能力的格局
UI是至关重要的. 它非常值得你深思熟虑的多学习几遍.
---------------------------

正文:

当你打开一个app的时候,你看到的第一眼,他们的底层,都是一个对象,你所看到的
一张图片是一个UIImageVIew对象
一段文字是一个UIlabel对象
一个按钮是一个UIButton对象
一个开关是一个UISwitch对象
一个进度条是一个UIProgressView对象
等等… 我们并不需要写这些对象,苹果已经给我们封装好了,这是UIKit里面包含的.
----UIkit框架:创建和管理应用程序的用户界面. 主要是界面交互层提供的功能.
----AVFoundation框架: 是针对音频,视频的处理,你就需要调用到此框架的函数
等等… 简单的来说,我们的开发,只是站在巨人的肩膀上进行编程.调用框架的API即可.

前奏

首先打开Xcode,要开发IOS程序,那么我们新建项目,选择IOS的SingleVIewApplication,创建好项目,就可以开始第一个程序的开发了.
ProductName可以自定义,但不要中文,编码是不支持的.
OrganizationName是你的组织名称
OrganizationIdentifier是你的组织唯一标识
这个标识很重要,它会根据ProductName进行区分 生成BundleIdentifier路径
当然这绝不能重复,否则应用安装或苹果商店审核会被覆盖掉.
剩下的按照默认选项即可了,不需要过多的了解.因为暂时用不到.

Main.storyboard

创建好项目后,你能得到一个非常重要的Main.storyboard
它是一个描述你应用界面的一个文件.当然它的本质上是xml.
它可以进行所见即所得的控件拖拽编辑,也可以实时浏览不用IPhone之间的屏幕适配
Main.storyboard它是非常重要的一个搭建UI界面的文件.
1.可以用快捷键shift+command+L打开控件工具箱
之后将里面的任意控件拖拽到Main.storyboard上面,运行项目,你就发现.
它确实是一种所见即所的开发方式,对于新手来说非常的方便.
你会发现它和易语言有异曲同工之妙哈哈.
2.通过拖拽搭建出一个<计算机界面>
在控件工具箱拖拽出两个TextField组件,三个Lable组件,一个Button组件.
当然你可以拖一个组件后,点击组件,按住Option,鼠标直拖动
也能快速的在同坐标上复制出另一个相同的组件
3.双击Lable可进行更改标签名字.
也可以在它的左边的属性列表内找到Text直接更改.
3.更改TextField的焦点获取到的键盘类型
在属性区域内找到KeyboardType更改为NumberPad
这样这个文本框成为第一响应者后得到的键盘类型就是数字键盘了.
4.如果模拟器内键盘无法弹出来,点击command+k即可,如还不行
点击Hardware-Keyboard-ConnectHardWareKeyBoard取消掉.
意思就是我们不连接外置的键盘了.
按照以上步骤,拖出来一个计算器界面的样子就可以了,虽然它目前没什么功能.
哦对了,Button组件属性中是具有Lable组件的.所以Button也可以有文字.

  • 总结:我们大致的使用了UIBUtton,UILable,UITextField组件,了解了Main.StoryBoardh和一个基本项目的创建.
    但是!!!组件他们的父类,无论是直接还是间接! 都继承了UIView!!
    手机上看到的所有组件,最终它们所继承的 都是UIView
    UIVIew本质是个容器,任何继承了UIView的控件间接的也是一个容器哦
    我们刚刚拖拽的控件到了Main.stroyboard里,那么它就是默认的view的子控件哦
    继承了UIVIew的控件都很单纯的,只能有两件事,展示数据.采集数据(你觉得他很可怜,就可以给他写父类拓展哦)
  • 重点:但是什么时候创建UIView! 什么时候展示,什么时候销毁,点击后的事件是UIViewController处理的**

UIVIewController

当你拖了一个BUtton到了VIew里面,那么是谁管理它的创建和销毁呢,就是UIVIewController了
他们的关系: UIVIewController->UIVIew->UIButton
这个时候,你打开手机看到的第一个界面,它首先会有一个控制器的诞生,
之后控制器生成了父类的控件大UIView容器,里面又产生了子类的控件… 这是一个基本的过程.
所以用脑子想一想,以后的代码肯定都要写到UIViewController的… 这是个很基本的事
默认系统给你创建的就是 ViewController文件了 ,它继承了UIViewController,
并且它也在Main.storyboard里的ViewController组件中的属性绑定了ViewController类
之后系统又默认在ViewController组件中提供了View容器.
这些都是系统帮我们自动做的.我们也可以删了自己搞.都一样.
就和eclipse会自动帮你创建main一样,都是基本操作

绑定事件咯

点击按钮执行一个点击事件, 打开Assistant编辑器,你可以会出错哦
如果有多个项目,一定要把Target给取消掉,否则你连线哭死你.我当时就因为此事
捉摸了3小时才发现怎么解决.

另外不建议在.h写控制的代码,应该写到@interface类扩展中
@interface 类名() @end 类拓展这样写哦~
类拓展是私有成员.相当在里面写的属性方法,和java中默认加了个private一样
这样很安全.

添加事件咯:*

打开main.storyboard,打开assistant,点击任意组件,按住control 托到@interface里
松手,connection选择action,name你看着写,type写none就行,我们不需要参数.event选
touch up inside事件,就是手指点的事件. 然后点击连接. 系统就自动生成这个方法了.

这个时候,点击了这个按钮的时候,就会进入你这个方法里面,进行处理就行了.
**值得一说的是:**反向托线,返回类型你不能写void,依然要写IBAction的
它还是表示void的返回值,但是系统就已经允许你拽线了,

所以的空间都继承uivew,负责两点,展示数据,采集数据
但负责的操作都要在viewcontroller里面的哦 理解这一点其实就没啥问题了.

要删除事件,把代码删除了,在控件中右键把线删了,就行了

实现计算功能

这个时候需要数据获得 要怎么弄呢?
你现在想要获得两个UITextField内容吗?
我们需要进行属性的连线哦,和viewcontroller进行关联.
就能拿到这属性了. 不要action了 要选outlet
name依然自定义,type可以id也可以组件基类反正强转就行

  • 重点:
    property一定要用weak类型的指针!!!
    负责内存泄漏!!!
    已经被控制器在后面创建出来了,所以你不需要强指针引用.
    .text获得文本框的类型,返回NSString*
    对象方法 intValue,转成int
    互加一下 . 结果复制给lable标签.就行了
    lable也是text改内容噢 和文本框一样
    但是结果得到的是 数字,需要转换一下
    类方法NSString stringWithFormat就可以了

完成了简单的计算器功能

到现在,结果显示出来了,可是键盘没有弹回去.
有个概念:谁召唤出来的键盘,谁就是第一响应者
应该让第一响应者"辞去职位" 这个时候键盘发现没有响应者 ,键盘就会回去了
当点完按钮后 让第一响应者辞去职位.
类方法 resignFirstResponder 就可以了
可很明显这个方法需要把全部可能成为第一响应者的都要写一遍.很麻烦吧
可以让当前的view停止编辑,这个时候view里面的全部子控件,就都会被取消了
类方法 endEditing:YES 就可以了


阶段总结:
UIView 对象方法 resignFirstResponder 辞职第一响应者 (让键盘返回去)
UIView 对象方法 endEditing 停止编辑 (让子类全部停止编辑) (让键盘返回去)
NSString类方法 stringWithFormat 格式转换(返回NSString*的字符串)
NSString对象方法 intValue 转为int(返回出int类型)
Lable TextField .text 对象方法 更改文本内容

必须: view必须有ViewController 所有的组件基类都是uiview
补充: 前两个方法他们都可以让键盘缩回去,但endEditing会让子类的也缩回去.
resignFirstResponder只能单纯的让自己不包括子类.


UIButton组件

1.Background属性 设置背景图,它可以和按钮的文字同时存在
2.Image属性 它会让文字向左进行布局.图片向右
值得一说的是,image属性设置后会根据文字数自动调整按钮的大小
Background属性如果文字超越了大小,那么会以…代替
如果默认什么都不设置,也是以…代替
3.TextColor属性 设置颜色属性,这很简单
4.Font属性 设置字体类型和大小.这也很简单
5.Type属性 按钮类型,我们一般使用自定义的
如果使用系统类型,那么默认点击后 按钮就是灰色.
6.StateConfig属性 是状态类型
1.默认状态
2.高亮状态
3.选中状态
4.禁用状态
7. frame属性 包含了 CGRect又包含了 CGPoint CGSize 这三个结构体
CGPoint 包含了 x y坐标 CGSize 包含了 w h宽高
CGSizeMake(w,h);
CGPointMake(x,y);
CGRectMake(x,y,w,h); 它们可以快速的创建出来我们想要的结构体方法
任何的uiview都会有frame属性.
注意:如果使用的是6.0的xcode,记得把use auto layout关掉,不然你改w h没用的
7.1 center属性(和frame相似)
只能改变坐标. CGpoint类型
注意: 不过这个坐标得到的是 控件中心点的结构体哦!!!
7.2 bounds属性(和frame相似)
只能改变宽高 CGSize类型
切记,这里面虽然也有CGpoint,但是xy永远是0,因为它是相较于自己的.
所以修改CGSize就可以了. 也是从控件中心开始的.
7.3transform属性(比fream更强)
使用方法请看下一篇日记.
8. tag属性 包含了 一个可以自定义的标记.
可以用它来做许多判断. 这是每个uiview都有的属性.
9.更改frame/center/bounds很生硬吧,直接更改大小,位置,中心位置,中心大小
1.可以通过UIVIew的类方法来执行
[UIVIew beginAnimations:nil context:nil] //开启一个动画
[UIVIew setAnimationDuration:时间]//设置动画的时间
…执行更改的代码块
[UIView commitAnimations];//提交动画
2.上面的步骤是非常麻烦的,我们可以直接通过oc的特性block式执行动画
[UIVIew animateWithDuratoin:时间 animations:^代码块]
这样非常方便,它还有更多的参数,执行完之后,执行另外的代码.之类的.

代码创建UIButton控件

以上的创建控件几乎都是在main.storyboard拖拽出来的.这肯定是不行的.以代码来创建出
我们需要在controller的viewdidload中执行需要的动态创建代码.
这是父类的一个方法,我们进行了重写,但是一定要supre调用父类进行初始化,不然会发生很多不可思议的bug
1.UIButton button = [UIbutton alloc]init] ;//我们开辟了控件,进行了初始化. 这个按钮就出现了
2.button里面有标签属性,我们可以设置文字,但是按钮是分状态的,我们要分不同的状态设置文字
2.1对象方法 setTitle:@“默认状态” forState:UIControlStateNormal 默认状态 .它是个枚举
UIControlStateNormal
UIControlStateHighlighted
UIControlStateDisabled
UIControlStateSelected 这些状态都是可以选择的.
3.对象方法 setBackgroundImage:(UIImage ) forstate:状态
和设置文字一样, 这个是设置不同状态的按钮背景图
添加背景图需要一个 UIImage对象. 它是专门用来存储图片的.
初始化只需要用类方法 imageNamed@“图片名” 就可以了.
让这个组件添加到控制器的view里面. 不然是无法看到的
4.self.view addSubview: UIVIew类型!!! 那么按钮肯定可以传递进去的.哈哈
5.设置不同文字下的颜色 setTitleColor forState …
当然传递一个颜色对象 [UIColor redColor];// 枚举类方法创建.
6.还需要设置frame. 否则你是看不到的. 没有坐标宽高.
用CGRectMake直接设置就可以了.

如果需要系统按钮,用类方法直接创建对象就可以了
UIBUtton buttonWithType:选个就ok
如果需要给按钮增加事件: 用对象方法 addTarget 就可以了.非常简单.

本篇总结

1.了解 main.storyboard面板
2.明白 组件的基类 是UIVIew
3.明白 基础拖动组件的使用
4.掌握 ViewController是必不可少的
5.掌握 一个基本点击事件的产生
6.掌握 如何去拖线或反向拖线并通过assistant来快速编写代码.
7.掌握 通过代码来创建出UIButton

主要代码总结:
UIView 对象方法 resignFirstResponder 辞职第一响应者 (让键盘返回去)
UIView 对象方法 endEditing 停止编辑 (让子类全部停止编辑) (让键盘返回去)
UIVIew 对象方法 animateWithDuratoin 执行动画
UIVIew 对象方法 addSubview 添加子类
UIVIew 对象方法 addtarget 添加事件
NSString类方法 stringWithFormat 格式转换(返回NSString*的字符串)
NSString对象方法 intValue 转为int(返回出int类型)
NSStringFromCGRect() 让CGRect转为NSSring输出非常方便.

CGSize/CGPoint/CGRect 三个基本结构体
.text 文本内容
setTitle 设置标题
setBackgroundImage 设置背景图片
setTitleColor 设置文字颜色
控件的frame,center,bounds

ok第一篇复习日记写到这边结束了.
累死老子了 主要还是理解过潜在的,要理解本质,它到底是如何做到的.
当然后面会讲到属性layer你就发现这都不是控件的属性哈哈哈哈 本质是layer
下篇见

发布了3 篇原创文章 · 获赞 0 · 访问量 129

猜你喜欢

转载自blog.csdn.net/u014270781/article/details/105122338