对iOS UIView的复习与总结

在main文件中,UIApplicationMain函数一共做了三件事

  • 根据第三个参数创建了一个应用程序对象
    • 默认写nil,即创建的是UIApplication类型的对象,此对象看成是整个应用程序的一个抽象,负责存储应用程序的状态。
  • 根据第四个参数创建了一个应用程序代理类对象
    • 所谓代理,及帮助另一个对象做事情。上面第一步中创建的应用程序对象只负责存储应用程序的状态,但不提供响应,而是给代理发消息,由代理负责针对不同的状态提供响应。比如说:程序一启动,代理就要响应一下,说明弹出的第一个界面是谁。
    • 其中,就是传入一个类的类名字符串即可,此代理类对象一定是系统创建的,而且只有一个,也就是单利。其中AppDelegate class返回的是这个类的类型描述信息,在使用NSStrinFromClass这个函数,从类型信息中把类名以名字符串形式返回。
  • 第三件事,启动了事件循环
    • 一个背后运行的死循环,用于不停地检测屏幕上的触点事件,一检测到触摸事件,立即将此事件传给用用程序,让程序提供相应

如何搭建一个界面? – UIViewController

  • 作用:
    • 负责创建界面
    • 负责提供界面与用户的交互响应
  • 特点:
    • 天生自带一个视图属性,所有界面设计就是添加到这个视图即可。
  • 规范写法:
    • step1:创建一个类,继承自UIViewController
    • step2:在类中的viewDidLoad方法方法中,编写构建界面的代码
    • step3:在启动方法中,只需要将这个自定义的类创建出实例,作为window的根视图控制器即可
  • viewDidLoad方法的特点:
    • 此方法是控制器的那个view生命周期的起始点,即创建完view实例之后,第一个执行的方法,并且此方法只会调用一次
    • 除此方法外,view还会存在其他状态,如:viewWillAppear、viewDidAppear、viewWillDisappear、viewDidDisappear,这些方法会随着view的显示或隐藏而执行多次,但只要控制器没有销毁,view没有销毁过,则viewDidLoad方法只会调用一次

界面元素的基础 – UIView

  • 是什么?所有界面上看的见的东西都是UIView的子类,系统定义的一个通用的描述界面上某个可显示的矩形区域,一个重要的特性就是具备容器性,即UIView可以内部添加其它的UIView,除此以外它还能提供触点的响应。
  • 核心属性:
    • frame(框架,边框):用于描述这个视图在父视图中的位置及占据的区域大小
  1. CGRect结构提类型
  • 包含origin属性和size属性
  • origin:CGPoint类型的结构体
  • size:CGSize类型的结构体
  • CGRect包含四个浮点,两个存储x和y用于定位,两个存储width和height用于描述大小
    • 如何构建一个CGRect类型的结构体变量呢?
      • 使用一组函数即可,函数名规律是是:结构体类型名 + MakeCGRect -> CGRectMake(x,y,w,h);CGPoint -> CGPointMake(x,y);CGSize -> CGSizeMake(w,h);UIEdgeInset -> UIEdgeInsetMake();特殊:UIRange -> UIMakeRange()
  • 有哪些子类?
    • UIWindow、UILabel都是UIView的直接子类,有一个特殊的分支叫UIControl,特殊之处在于有自己的高级事件,也管这个分支叫控件,UIButton、UITextField都是控件,但UILabel不是空间,虽然口头交流时经常误把很多不是空间的视图也称之为控件,但概念要清楚,只有UIControl的子类才能叫做控件。

UIView的几个子类:

  • UILabel 标签
    • 作用:显示文字
    • 核心属性:text: 类型NSStringnumberOflines:显示的行数,默认是1,如果设置为0,则代表行数无上限font:字体,字号textColor:文字颜色backgroundColor:背景色textAlignment:水平方向文本的对齐方式
  • UIButton 按钮
    • 作用:以文字或图片的样式提供给用户一个可点击并相应的区域
    • 核心属性:默认图文左右排
  1. 文字title:setTitle: forState:
  2. 图片image:setImage: forState 对于后缀是.png的图片省略后缀,其他的图片类型就需要加后缀名。
  3. 背景图backgroundImage: setBackgroundImage: forState
  4. 按钮有四个状态:normal(摆在那不动)、highlight(高亮状态,按下去不松手)、selected(选中状态,通过设置按钮的selected属性为YES才会进入到这个状态)、disable状态(不能用状态,通过设置按钮的enable属性为NO时进入此状态)
    • 创建事项:
      • 使用工厂方法创建按钮式,可以通过参数指定是系统版还是自定义版
      • 使用new或alloc init 方式创建的按钮,等价于传自定义版参数
      • 如何选择使用系统版,还是自定义版按钮呢?
      • 因为系统自带高亮,所有美工给一套图时,就选系统版
      • 如果美工给了两套图,就选择则自定义版
      • 自定义扮,title的文字颜色为白色,系统板时有默认颜色,title为蓝色
    • 核心事件:
      • 事件种类:touchUpInside
      • 如何添加对事件的响应:addTarget: action: forControlEvent
  • UITextField
    • 作用:接受输入
    • 核心属性:text属性:NSString类型。可读可写,读取就是获取输入的文字,给属性赋值,则文字会显示到文本框中键盘属性设置边框样式:borderStyle设置键盘样式:keyboardType设置键盘右下角按键的样式:returnType设置键盘整体色系风格:keyboardAppearance设置键盘是否是密码框:secureTextEnter
    • 核心事件:

插播知识点

[xxx copy]将长度可变的的复制成长度不可变的[xxx mutableCopy]将长度不可变的复制成长度可变的NSArray --> [NSArray NSmutableCopy] -->NSmutableArray

问题

字符串类型的属性是用什么修饰?答案:使用copy修饰,因为有一种特殊情况,就是一旦将MutableString赋值给属性,一旦有其他的引用也指向这个可变字符串,就会有修改其内容的可能。这样的话,就会导致明明声明的是不可变长度的属性,会发生内容的改变。一旦用了copy修饰,则就算赋值一个可变长度的内容,也会先执行一次copy,将其拷贝成一份长度不可变的副本,让属性只想这个副本,就算有其他引用修改那个长度可变的字符串,也不会影响副本的内容。

  • 文本框
    • 键盘为什么弹起来?
      • 当有触点在文本框时,系统对这个触摸动作进行了响应,相应的结果就是让文本框成为第一响应者
      • [textField becomeFirstResponder 成为第一响应者 ,调用键盘
    • 如何收键盘?
      • 取消掉文本框的第一响应者身份即可
      • [textField resignFirstResponder]
    • 什么时候收键盘?
      • 情况一:点击屏幕的空白处:点击控制器的那个view
        • 实现控制器的 touchesBegan:方法即可
      • 如果有多个键盘:如果界面中有多个文本框,那么可以通过结束他们父视图的编辑状态方法
        • 批量关闭所有文本框弹起的键盘:[self.view endEditing:YES];
      • 情况二: 点击键盘右下角return按键
        • - (BOOL)textFieldShouldReturn:(UITextField *)textField
        • 右下角按键类型:returnKeyType
    • 密码框:secure
    • 提示性:placeHolder
  • 代理
    • 遵守协议
    • 实现协议中的方法
    • 设置委托方的代理人为当前对象
    • 代理方法的第一个参数,是委托方本身。
  • 懒加载
    • 也叫延迟加载,等到需要使用时才开辟空间创建对象
  • 消息框UIAlertContent
    • 作用:弹出提示,有两种样式,屏幕中间,屏幕底部
    • 如何解决样式?创建实例的时候,通过style参数,alert样式在屏幕中间,actionsheet在屏幕底部
    • addTextFieldWithConfigurationHandler:参数是 block ,在block中可以设置 alert帮我们创建 文本框
    • 数组中的 文本框 是 第四步 添加进来的文本框UITextField *usernameField = alert.textFields[0];UITextField *passwordField = alert.textFields[1];
  • 使用xib技术实现界面
    • 理念:将控制器中原本需要些大量代码进行构建界面的过程,通过一个后缀是xib的文件简化此操作。当再去创建控制器实例时,系统会通过读取xib文件,完成界面的创建。针对系统创建的这个视图,需要在控制器中访问时,可以通过连线的方式完成关联。
    • IBOutlet关键字:将控制器中的属性与界面中系统创建的某个视图关联在一起
    • IBAction关键字:键控制器中的方法与界面中系统创建的某个视图的时间关联在一起
  • 切换VC
    • A -> B:使用的是A控制器的presentViewController方法
    • B -> A:使用的是B控制器的dismissViewController方法
    • 注意A和B的声明周期:A推出B时,虽然看不见A了,但是A没有被摧毁,从B返回A时,B会被销毁,A从隐藏状态编程显示状态
  • 使用xib简化创建界面的过程
    • 如何实现
    • 借助于系统的Interface Builder 完成,IB以前是一款独立的软件,现在整合到xcode中, 只需要创建自定义的控制器时,勾选下面的“Also Creat Xib file”选项,则自动生成与控制器名相同,后缀为xib的文件,xib以前叫做叫nib
  • UIStepper 步进控件
    • 作用:记录一个浮点值,并且控件提供了两个按键界面,由用户精确地控制记录支个值得递增或递减
    • 核心属性:value
    • 核心事件:valueChanged
  • UISlider 滑块控件
    • 作用:记录一个浮点值,通过一个可以滑动的按键,快速在某个范围内得到一个不容易精确控制的数值
    • 核心属性:value
    • 核心事件:valueChanged
  • UISwitch 开关控件
    • 作用:记录一个布尔值,通过点击的方式,可以记录用户是否的选择
    • 核心属性:on(BOOL类型)
    • 核心事件:valueChanged
  • SegmentedControl 分段控件
    • 核心属性:selectedSegmentIndex
    • 核心事件:valueChanged
  • Activity Indicator 菊花控件
    • 核心属性:isAnimating
    • 核心方法:startAnimating stopAnimating
  • Progress 进度提示条
    • 核心属性:progress (0 ~ 1 浮点)

注意:浮点型和整形相比,永远也到不了1。浮点型精确到小数点后6位

  • NSTimer定时器
    • 作用:可以设置某方法,每个一段时间,自动执行
    • 如何创建并启动?
      • timerXXXXX : 创建好的定时器,不会自动启动,我们只有把该定时器添加到事件循环中
      • scheduleXXXX: 创建好定时器后,自动启动
  • DatePicker
    • 核心属性:date
    • 核心方法:日期格式化 HH - mm - ss yyyy - MM - dd
  • PickView
    • 我们关注三问一答
      • 三问:(DataSource)
  1. 有多少列
  2. 每列有多少行
  3. 每行长什么样子
      • 一答:(delegate)
  1. 选中某行如何处理
  • UINavigationController导航控制器
    • 作用:为了管理多个控制器
    • 配置导航类(NavigationBar)
      • 高度:算上状态栏64个点(状态栏20个点)
      • 内容:通过navigationItem属性来完成设置
      • navigationItem设置的是每个界面上导航栏中的内容
      • 左:leftBarButtonItem/leftBarButtonItems
      • 中:title/title View
      • 右:rightBarButtonItem/rightBarButtonItems
      • 左右都是类似于可点击的按键,是UIBarButtonItem类型
    • 如果修改NavigationBar 的外观,该导航下所有子控制器都会改变
      • self.navigationController.navigationBar.tintColor = [UIColor redColor];
    • 配置工具栏(toolBar)
      • 位于导航界面的底部,默认是隐藏的,高度44个点,通过设置Navigation.toolBarHidden = NO 即可显示
      • toolBar中可以通过toolBarItem的属性,设置按键,位置不分左中右,可以用木棍,弹簧调整视图。
    • 设置导航控制器的titleColor
  • UIImageView
    • UIImage(存图片) -> UIImageView(显示图片的视图)
    • 核心:image
    • UIViewContentModeScaleToFill 默认,设置的宽高是多少,就是多少
    • UIViewContentModeScaleAspectFit 保持宽高比
    • UIViewContentModeScaleAspectFill 保证宽高比,可能图片会被切割掉
    • //裁剪 姿势图超出的部分iV.clipsToBounds = YES;
  • UIKit层面动画
    • 预备:动画 — 序列帧动画
      • 每一帧是一张静态的图片,按照一定间隔时间,快速连续播放,最终通过人眼的视觉停留效果实现的动画
  • UIScrollView滚动视图
    • 作用:用于查看更大范围的图片或文字内容信息的视图
    • 特点:虽然是视图,但本身scrollView没有外观,主要是通过加载子视图来完成的展示,内部子视图的区域可以大于scrollView占据的空间,通过滑动这种交互方式能够实现查看超出范围的那些子视图
    • 核心属性:frame 可视区域的大小contentSize 内容大小(可以滑动区域的大小)contentOffset 记录滑动的偏移量pagingEnabled 设置整页滑动showsHorizontalScrollIndicator 是否隐藏水平滚动条showsVerticalScrollIndicator 是否隐藏竖直滚动条bounces 是否有弹性效果
  • UIPageControl
    • 作用:页数的提醒
    • 外观:一条区域中包含多个小圆点
    • 核心属性:
      • numberOfPages 圆点的个数
      • currentPage 当前被选中的是第几个小圆点(下标从0开始)
      • pageIndicatorTintColor 设置未选中的圆点颜色
      • currentPageIndicatorTintColor 选中圆点的颜色
      • userInteractionEnabled 是否与用户交互
    • 与ScrollView配合页数移动方法:
      • 在scrollView的协议方法中

- (void)scrollViewDidScroll:(UIScrollView *)scrollView

{

NSInteger currentPage = scrollView.contentOffset.x / scrollView.frame.size.width + 0.5;

self.pageControl.currentPage = currentPage;

}

<< · Back Index ·>>

发表回复

相关推荐

回憶歷代建國70年

2019年是新中國建國70周年,如果是一個人的話,70歲是古稀老人瞭,應該兒孫滿堂,正式享受天倫之樂的時候,但是對一個國...

· 11分钟前

星燧:驚爆-神秘病毒致美國75000人被封鎖在內華達沙漠

9月4日,根據相關媒體報道,美國內華達州沙漠1日連夜降下暴雨,導致交通中斷,當地正舉行的文化節“火人節”數萬名參與者因此“...

· 15分钟前

Myb介导花青素的生物合成

上期说到花青素的生物合成主要有结构基因和调节基因共同作用,其中调节基因主要是指能够调控基因转录的一些转录因子(transc ...

· 25分钟前

橫截面

不是所有光滑流都有橫截面,一個明顯的必要條件是流不能有奇點。橫截面是由龐加萊 (Poincare,(J.-)H) 引進的。通過橫截面可以...

· 41分钟前

拨开充国古县的历史疑云

充国,乃四川历史上一个较为古老的县,曾与湘西的古充县一同载入《汉书·地理志》,为“汉王王巴蜀汉中四十一县之一”,据《南 ...

· 42分钟前