当前位置: 移动技术网 > 移动技术>移动开发>IOS > iOS 基础UI

iOS 基础UI

2018年10月25日  | 移动技术网移动技术  | 我要评论

课程就要接近尾声了所以我总结了一些关于ios ui的一些基本知识点和属性

day_01 uikit框架-uikit-uiview

创建window

在appdelegate.m文件内实现

1.创建window对象

[uiscreen mainscreen]是一个单例,代表屏幕大小的一个单例

self.window = [[uiwindow alloc]initwithframe:[uiscreenmainscreen].bounds];

2.设置window属性

self.window.backgroundcolor = [uicolor browncolor];

3.使创建的window对象成为主窗口且可见(一般来说一个应用程序只有一个主窗口)

[self.window makekeyandvisible];

4.创建视图控制器

创建一个mainviewcontroller类

mainviewcontroller *mainvc = [[mainviewcontroller alloc]init];

self.window.rootviewcontroller = mainvc;

 

操控模拟器

回到主界面:shift+command+h

横竖屏切换:command+方向键(左右)

缩放:optional+鼠标左键

 

每一个视图控制器自带一个视图(view)

给视图控制器的视图设置属性

self.view.backgroundcolor = [uicolor whitecolor];

 

ui中所有可见的视图都是uiview或者uiview的子类

视图展示三部曲

1.创建对象

2.设置属性

3.添加到父视图上

 

1.创建对象

uiview *blackv = [[uiviewalloc]initwithframe:cgrectmake(100,100,200,200)];

2.设置属性

blackv.backgroundc-olor = [uicolor blackcolor];

3.添加到父视图上

[self.view addsubview:view];

 

view的属性设置

a.设置背景颜色

blackv.backgroundcolor = [uicolor blackcolor];

b.设置透明度(0~1之间)

blackv.alpha = 0.8;

c.设置tag值(默认为0)

blackv.tag = 10;

d.根据tag值获取相应的视图

uiview *v = [self.view viewwithtag:10];

e.获取子视图

nsarray *arr = [self.view subviews];

f.获取父视图

uiview *superv = [view superview];

g.视图的显隐

blackv.hidden = yes;

 

frame,center,bounds的不同

frame既可以改变当前视图的大小,也可以改变当前视图的位置,它是相对于父视图而言

 

center是改变当前视图的位置

 

bounds可以改变当前视图的大小和子视图的位置,默认原点是(0,0)

bounds的point描述的就是当前视图左上角点和原点的距离

point设置为整数那么原点往左上角偏移

简单来说就是将point看作是描述左上角点的坐标

 

 

视图的添加和删除

创建视图redv和yellowv

视图插入

a.将redv放在blackv下面

[self.view insertsubview:redv belowsubview:blackv];

b.将yellowv放在redv和blackv的中间(把yellowv放到redv上面)

[self.view insertsubview:yellowv abovesubview:redv];

c.将yellowv通过下标插入到redv下面(把yellowv方法第一层)

[self.view insertsubview:yellowv atindex:0];

 

将redv视图放到最前面

[self.view bringsubviewtofront:redv];

 

将blackv视图放到最后面

[self.view bringsubviewtoback:blackv];

 

将视图从父视图上移除

[yellow removefromsuperview];

day_02 uilabel、uibutton、uitextfield、uiimageview

 

一、uilabel:文本视图

text:设置文本

textcolor:文本颜色

numberoflines:设置行数(设置为0自动换行)

font:文本字体

systemfontofsize:文本字体颜色

textalignment:文本对齐方式

shadowoffset:阴影偏移量

shadowcolor:阴影颜色

layer.borderwidth:文本边框宽度

layer.bordercolor:文本边框颜色

layer.cornerradius:设置圆角

layer.maskstobounds:是否裁剪边缘

 

二、uitextfield:文本输入框

placeholder:占位符

borderstyle:边框风格(uitextborderstyleroundedrect:圆角)

clearbuttonmode:清除按钮显示状态

clearsonbeginediting:是否开始编辑的时候清除

leftview:左视图

leftviewmode:左视图模式

securetextentry:密文输入

keyboardtype:键盘样式

 

设置代理

textfield.delegate = self;

textfield协议重写方法

文本输入框协议里的方法

1、文本输入框能否开始编辑

-(bool)textfieldshouldendediting:(uitextfield *)textfield;

2、文本输入框已完成编辑(完成编译时实现的方法写在这里)

-(void)textfielddidendediting:(uitextfield*)textfield{

例如判断输入是否正确

}

 

3、文本输入框是否按回车键

-(bool)textfieldshouldreturn:(uitextfield *)textfield;

(取消第一响应者,即光标移除)

resignfirstresponder

 

 

 

 

4、文本框限制输入字数长度

-(bool)textfield:(uitextfield *)textfieldshouldchangecharactersinrange:(nsrange)range replacementstring:(nsstring*)string{

 

将每一次输入的字符进行拼接

判断每一次拼接之后的字符是否超过限制

如果超过{

把拼接后的字符传到textfield里

返回no,表示文本输入框内容不允许被添加

}

不超过就返回yes,表示文本输入框内容可以添加

}

 

三、uibutton:按钮控件

初始化方法:

buttonwithtype

设置按钮标题

settitle:(nsstring *) forstate:(uicontrolstate)

设置按钮标题颜色

settitlecolor:(nsstring *) forstate:(uicontrolstate)

点击高亮

showstouchwhenhighlighted = yes

背景图片(按钮的背景图片)

setbackgroundimage:(uiimage *) forstate:(uicontrolstate)

前景图片(点击前按钮的背景图片)

setimage:(uiimage *) forstate:(uicontrolstate)

设置图片位置

setimageedgeinsets

settitleedgeinsets

 

四、uiimageview:图片视图

创建一张图片

如果不是png格式就必须加后缀名

uiimage *image = [uiimage imagenamed:(nsstring *)];

创建一个图片视图

添加图片

imageview.image = image;

动画效果

用一个数组把连续的图片存储起来(for)

添加动画图片

animationimages = (nsarray *);

动画播放时间

animationduration

动画播放次数

animationrepeatcount

动画开始

startanimating

 

day_03 uiviewcontroller、customview

customview:自定义视图

 

视图的横竖屏

-(void)layoutsubviews{

获取屏幕当前方向

uiinterfaceorientation ori= [uiapplication sharedapplication].statusbarorientation;

}

 

视图控制器的跳转(用按钮实现)

创建视图控制器对象

模态出一个控制器

presentviewcontroller:视图控制器对象animated:是否开启动画效果completion:^{完成之后要实现的步骤(没有直接写nil)};

 

返回上一个控制器

[self dismissviewcontrolleranimated:是否开启动画效果completion:nil];

 

 

 

day_04 uievent 事件手势

一、触摸响应

触摸事件的四个方法

touchesbegan:触摸开始(触摸点下去未松开的时候触发)

touchescancelled:触摸取消(除非有电话打来强制取消触摸)

touchesended:触摸结束(触摸松开的时候触发)

touchesmoved:触摸移动(触摸移动的时候触发)

 

//封装的类

模仿button实现target action设计模式

@property (nonatomic,assign)id target;

@property (nonatomic,assign)sel selector;

方法

[self.target performselector:self.selector withobject:selfafterdelay:4];

 

二、响应者链

用户交互开关

是一个属性,bool值:userinteractionenabled

事件检测顺序

application -> appdelegate -> window ->rootvc ->btn1-> btn2 -> btn3

事件响应顺序

和检测顺序相反,一旦某个子视图对视图做出响应就不再传递

响应区域是子视图在父视图的区域

 

三、手势

添加方法

addgesturerecognizer:

设置时应打开用户交互

 

uitapgusturerecognizer:点击手势

numberoftapsrequired:点击次数

numberoftouchesrequired:手指同时触摸的数字

 

uipinchgesturerecognizer:捏合手势

scale:两个手指之间的距离

改变大小(应该设置为每次放大缩小都是基于上一次的基础作变化)

image.transform = cgaffinetransformscale(image.transform,pinch.scale, pinch.scale);

//偏移量重置

pinch.scale = 1;

 

uirotationgesturerecognizer:旋转手势

rotation = 旋转的弧度

image.transform = cgaffinetransformscale(image.transform,rotation.rotation);

//重置比例系数(弧度)

rotation.rotation = 0;

 

uiswipegesturerecognizer:滑动手势

direction:滑动的方向

判断滑动方向以此执行相对应的方法

 

uipangesturerecognizer:拖动手势

pan.view就是手势所在的视图

//根据拖动的偏移量重新设置视图的位置

imagev.transform =cgaffinetransformtranslate(imagev.transform, [pantranslationinview:pan.view].x, [pan translationinview:pan.view].y);

//偏移量重新设置为0(cgpointzero)

[pan settranslation:cgpointzero inview:pan.view];

 

uiscreenedgepanguesturerecognizer:屏幕边缘轻扫手势

edges:可以滑动的屏幕边缘方向

 

uilongpressgesturerecognizer:长按手势

minimumpressduration:长按的时间,默认是0.5

numberoftapsrequired:点击次数,默认是0

numberoftouchesrequired:同时触摸的手指数量

 

day_05uicontrol

(防止图片被渲染的方法(有时候必须写在设置图片的同时))

imagewithrenderingmode:uiimagerenderingmodealwaysoriginal

 

uicontrol:具有控制功能的空间,例如uibutton,uislider

 

改变值的触发状态:uicontroleventvaluechanged

 

uiswitch:开关控件

on:开关状态

seton:animated:开关初始状态和开场动画

外观:

ontintcolor

tintcolor

thumbtintcolor

 

uislider:滑动控件

continuous:是否停下来才确定值

minimumvalue:设置最小值

maximumvalue:设置最大值

 

uisegmentedcontrol:分段控件

initwithitems:(nsarray)items:初始化方法

momentary:是否开启选中之后的效果

tintcolor

 

uipagecontrol:分页空间(常和uiscrollview一起使用)

numberofpages:分页总页数

currentpage:当前页

deferscurrentpagedisplay:当前页在控件上的显示

 

day_06 uiscrollview

滚动视图

在滚动视图上添加图片视图

确定滚动视图的滚动范围

contentsize

 

滚动条是否显示

横向

showshorizontalscrollindicator

竖向

shwosverticalscrollindicator

是否整页滚动

pagingenabled

边缘弹动(设置无限循环图片时应开启)

bounces

点击状态栏回到最上面

scrollstotop

设置偏移量(滚动视图偏移的多少)

contentoffset

实现代理

self.delegate = self;

 

缩放:(把每一个图片视图都添加到另外新建的滚动视图,有图片的滚动视图实现缩放的方法,再把有图片的滚动视图都添加到一个滚动视图,这个滚动视图用来滚动展示图片)

设置最小最大缩放比例

minimumzoomscale

maximumzoomscale

实现缩放的方法(指定哪个视图可以被缩放)

viewforzomminginscrollview:(返回一个视图)

 

 

和uipagecontrol组合

page的方法

//屏幕偏移量(想展示哪个界面就设置为多少)

scrollview.contentoffset =cgpointmake(pagecontrol.currentpage*self.view.frame.size.width, 0);

uiscrollview的方法(写在减速完成里)

pagecontroll.currentpage =scrollview.contentoffset.x/self.view.frame.size.width;

 

day_07 uinavigationcontroller:导航控制器

导航控制器:管理一个或多个视图控制器

将rootvc作为导航控制器的根视图控制器

initwithrootviewcontroll

将导航控制器作为window的根视图控制器

rootviewcontroller

 

设置导航栏标题

title

navigationitem.title

设置导航控制条的透明与否

如果透明,那么视图原点从屏幕左上角开始

如果不透明,那么视图原点则从导航栏左下角开始

导航栏高度:44,状态栏高度:20

self.navigationcontroller.navigationbar.translucent = (bool);

bar:导航栏

设置bar的背景颜色

self.navigationcontroller.navigationbar.bartintcolor

设置bar的背景图片

如果图片高度小于44(导航栏高度),图片会填充状态栏和导航栏

如果图片高度等于44,图片则刚好设置为导航栏的背景

如果图片高度等于64,图片则刚好为导航栏和状态栏的背景

self.navigationcontroller.navigationbar setbackgroundimage:(uiimage*) forbarmetrics:uibarmetricsdefault];

设置bar上的空间颜色

tintcolor

 

在导航栏上添加控件

1、按钮为样式

self.navigationitem.leftbarbuttonitem = [[uibarbuttonitem alloc]initwithbarbuttonsystemitem:uibarbuttonsystemitemadd target:self action:@sel];

2、自定义图片样式

添加图片时设置不被渲染

intiwithimage

3、自定义文字样式

initwithtitle

 

设置右边多个按钮

self.navigationitem.rightbarbuttonitems = (nsarray *)

 

在中间添加分段空间

self.navigationitem.titleview = segmentcontrol

 

点击右边按钮跳转视图控制器

push跳转

导航控制器以栈的形式管理一个或者多个视图控制器,第一个被加入的控制器称之为根视图控制器,处于栈底,一般处于栈顶得控制器就是当前正在被展示的控制器

push就是将控制器加入栈中

pop就是将控制器从栈中拿出来

self.navigationcontroller pushviewcontroller:控制器对象 animated:yes

 

在跳转的控制器中实现返回

pop

1、返回到上一个控制器

[self.navigationcontroller popviewcontrolleranimated:yes];

2、返回到指定控制器

[self navigationcontroller viewcontrollers]:栈里所有的视图控制器

3、返回到根视图控制器

[self.navigationcontroller poptorootviewcontrolleranimated:yes];

 

 

day_09 uitabbarcontroller:标签栏控制器

 

设置标签栏控制器:

第一步 创建视图控制器

第二步 将视图控制器加入导航栏(一个标签栏对应一个导航栏)

第三步 将导航栏加入到标签栏

viewcontrollers:通过数值的形式添加

第四步 将标签栏作为根视图控制器

 

设置badgevalue(消息提醒)

如果视图控制器加入了导航控制器,那么我们设置标签栏的标题和badgevalue需要通过导航控制器的属性设置,而不是通过标签控制器的属性设置

 

设置标签栏样式

a、系统样式

self.tabbaritem = [[uitabbaritem alloc]initwithtabbarsystemitem:uitabbarsystemitemfavoritestag:100]];

b、自定义样式

self.tabbaritem = [[uitabbaritem alloc]initwithtitle:nsstring *image:uiimage * selectedimage:uiimage *];

 

设置属性

a、标签标题

通过tabbaritem.title设置标签标题

b、背景图片

标签栏的高度49,如果图片高度超出标签栏,图片不会自动压缩

 

设置默认选中的标签栏

selectedindex:标签栏的坐标

 

设置标签栏颜色

tabbar.bartintcolor

设置工程中所有tabbar的背景颜色

[[uitabbar appearance] setbartintcolor:[uicolor *]];

[uitabbar appearance]返回工程中所有的uitabbar

设置工程中所有导航栏的背景颜色(对导航栏有用)

 

设置字体属性

nsdictionary *dic = @{nsforegroundcolorattributename:[uicolor *],

nsfontattributename:[uifontsystemfontofsize:20]};

[[uitabbaritem appearance] settitletextattributes:dicforstate:uicontrolstatenormal];

 

 

day_10uitableview基本使用

 

一、创建一个表视图对象

uitableview *tab = [[uitableview alloc]initwithframe:[uiscreen mainscreen].boundsstyle:uitableviewstyleplain];

有两种风格的uitableview:

uitableviewstylegrouped和uitableviewstyleplain

 

二、设置属性

a、设置行高

tab.rowheight

b、设置分割线颜色

tab.separatorcolor

c、设置代理(delegate提供外观设置,datasource提供数据源(主要给cell赋值))

遵循代理

 

三、添加到父视图

 

代理必须实现的两个方法:设置有多少分区,每个分区有多少行

tableview:cellforrowatindexpath:确定每个分区有多少行

tableview:numberofrowsinsection:确定有多少个分区

 

确定有多少个分区,每个分区多少行之后,为每一行的cell配置数据

方法名:tableview:cellforrowatindexpath:

indexpath.section:当前显示的分区(返回nsinteger)

indexpath.row:当前显示的分区的行数(返回nsinteger)

 

1、设置重用符号

uitableviewcell *cell = [tableviewdequeuereusablecellwithidentifier:@“reuse”];

2、判断如果cell为空,创建cell

if(cell == nil){

cell = [[uitableviewcellalloc]initwithstyle:uitableviewcellstylesubtitle reuseidentifier:@“reuse”];

}

3、cell自带了textlabel(标题标签),detailtextlabel(详细内容标签),imageview(图片视图)

设置textlabel.text,detailtextlabel.text,imageview.image

4、返回cell

return cell;

 

代理的其他方法

1、设置分区的行的高度

tableview:heightforrowatindexpath:

返回cgfloat

 

2、设置分区头标题

tableview:titleforheaderinsection:

返回一个nsstring

 

3、设置分区头高度

tableview:heightforheaderinsection:

返回一个cgfloat

 

4、设置分区头视图(可以在分区头添加view)

tableview:viewforheaderinsection:

返回一个视图(label或者imageview等等)

 

5、设置右边栏标题(通讯录右边的a-z,通过点击跳到对应的分区)

sectionindextitlesfortableview:

返回一个数组

 

6、选中某个单元格方法

tableview:didselectrowatindexpath:

无返回值

用法:选中之后跳转到详细页面

 

获取plist文件的所有信息

nsstring *s = [[nsbundle mainbundle]pathforresource:@“plist文件名” oftype:@“文件后缀”];

plist文件使用字典保存就用字典接收,用数组就用数组接收,使用对应的对象类型接收数据

nsdictionary *dic =[[nsdictionary alloc]initwithcontextsoffile:s];

day_11 uitableview编辑

 

添加编辑按钮

self.navigationitem.rightbarbuttonitem = self.editbuttonitem;

 

tableview编辑分四步

1、使tableview处于编辑状态

2、确定哪些cell可以被编辑

3、确定cell的编辑模式

4、完成编辑提交

 

删除操作

先操作数据源,再操作ui

1、删除数组中某一个元素

2、操作ui

删除某一行

[self.tableview deleterowsatindexpaths:@[indexpath]withrowsanimation:uitableviewrowanimationtop];

删除某一分区

nsindexset *set = [nsindexsetindexsetwithindex:indexpath.section];

[self.tableview deletesections:set withrowanimation:2];

 

cell的移动

1、确定哪些单元格可以被移动

2、操作数据,移动完成

sourceindexpath:起始坐标

destinationindexpath:移动后到达的坐标

a、先添加后删除

b、刷新整个ui

[self.tableview reloaddata];

 

限制跨分区移动

//a 跨分区移动

- (nsindexpath*)tableview:(uitableview *)tableview targetindexpathformovefromrowatindexpath:(nsindexpath*)sourceindexpath toproposedindexpath:(nsindexpath *)proposeddestinationindexpath{

//判断目标路径和起始路径如果相同,移动,否则,不能移动

if(相同){

returnproposeddestinationindexpath;

}else{

return sourceindexpath;

}

}

 

day_12 uitableviewcell

数组里面是字典,可以创建一个类作为model存储数据,通过kvc赋值

步骤:

model里面应实现setvalue:forundefinedkey:方法

1、遍历数组

for (nsdictionary *dic in self.array)

2、创建类对象

student *s = [[student alloc]init];

3、给对象赋值

[s setvaluesforkeyswithdictionary:dic];

 

创建一个类继承于uitableviewcell(自定义cell用来展示数据)

给类里面的属性实例化的时候把frame写在layoutsubviews里面

这个方法用来布局子视图

方法被触发的时机:

a、当子视图被添加到父视图上

b、屏幕做旋转

c、滚动视图

 

动态计算图片高度(等比例缩放)

缩放比例:用图片的宽度除以100(1比1的比例)

图片视图的高度:用图片的高度除以缩放比例

 

影响文本高度的几个因素:

文本内容的多少,文本所占宽度,文本字体的大小

nsdictionary *dic = @{uifontattributename:[uifontsystemfontofsize:17]};

//17号字体

文本高度:

cgfloat h = [text boundingrectwithsize:cgsizemake(200,10000)options:nsstringdrawinguseslinefragmentorigin attributes:dic context:nil].size.height;

 

day_13 uikit-xib

找到对应的nib文件,利用nib文件注册cell

uinib *nib = [uinibnibwithnibname:@“文件名" bundle:nil];

[self.tableview registernib:nib forcellreuseidentifier:@“重用标示符”];

视图与视图之间的对齐

leading edges:左对齐

trailing edges:右对齐

top edges:上对齐

bottom edges:下对齐

horizontal centers:纵向中心对齐

vertical centers:横向中心对齐

baselines:基线对齐

 

视图本身的位置

horizontally in container:以屏幕的纵向中心线对齐

vertically in container:以屏幕的横向中心对齐

两者结合就可以让view以屏幕的中心点对齐

 

视图的大小

width:视图的宽度

height:视图的高度

 

选中两个视图

equal width:两个视图等宽

equal height:两个视图等高

aspect ratio:设置宽高比

 

day_14 storyboard

sizeclass

iphone4s,iphone5/5s,iphone6

 

竖屏:(w:compacth:regular)

 

横屏:(w:compact h:compact)

 

iphone6 plus

 

竖屏:(w:compacth:regular)

 

横屏:(w:regular h:compact)

 

ipad

 

竖屏:(w:regular h:regular)

 

横屏:(w:regular h:regular)

 

 

day_15 uicollectionview

 

1、创建layout对象

2、创建uicollectionview

3、遵循代理

4、实现代理方法

5、注册自定义cell类

registerclass

6、添加到父视图上

 

day_16 uiimagepickercontroller

1、创建按钮用来进入相册

2、初始化uiimagepickercontroller

3、选择调用相册还是摄像头

4、设置代理

5、allowediting:允许编辑

6、用present方法弹出pick控制器

 

实现选中图片后执行的方法

imagepickercontroller:didfinishpickimgmediawithinfo:

用dismiss返回

编辑后的图片

info[@“uiimagepickercontrollereditedimage"]



 

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网