内存管理修饰:

  copy:NSString,block

     copy:将对象的拷贝赋给引用,拷贝完的是不可变的。

     为什么用copy?

      NSString类型的特点就是内容不可变的,但是给NSString赋值时,可以将NSMutableString赋过来,可能就会有其他持有MutableString的引用修改了这个字符串,结果你再用NSString访问字符串时就会发现,本来不可变的字符串在不知情的情况下被改变了。所以为了避免这种情况,就是用copy将内容复制成不可变之后再给NSString

 

     使用copy会更安全,但内存会被占用,一般情况下用strong不影响程序运行

 

  strong:除NSString以外的引用类型

   完全的拥有对象,引用计数器+1

 

  assign:基本数据类型、结构体、枚举


 

1.UINavigationController (导航控制器)

 

   1.1 是什么?

        继承自UIViewController,依然是一种控制器,

        这种控制器没有具体的view,是管理控制器的控制器

 

   1.2 优点?

      能够管理和控制VC的走向,比present方式更清晰

      有层级关系的  push...   pop...

      没有层级关系的  present...   dismiss...

   1.3 如何使用?

      step1:创建UINavigationController的实例

      step2:创建一个具体的vc实例,并将这个vc设置为UINavigationController的根视图控制器

      step3:设置navigationController为window的根视图控制器

      step4:想推出新的vc时,可以使用pushViewController的方法

      step5:想回退到上一个vc时,可以不写代码;或者是使用popViewController的方法

 

   1.4 内部原理

      1)navi内部有一个可以存储多个vc的数组,就是self.navigationController.viewControllers属性;并且这个数组使用“栈”的方式来管理数据。“栈”的特点:先进后出,后进先出。

      2)navi必须 有一个根视图控制器作为第一个展示的vc

      3)push出一个新的vc时,就是往栈属性中入栈一个vc对象,新的vc入栈之前显示的那个vc不会被释放

      4)pop现有vc时,才是将这个vc释放掉

      5)不能pop根vc

 

 

   1.5 配置导航栏

        访问导航栏:self.navigationItem

        导航栏包含三部分:

        1)中间的title

             self.title=  @“”;

        2)左侧的按钮区域

            self.navigationItem.leftBarButtonItem/s

        3)右侧的按钮区域

            self.navigationItem.rightBarButtonItem/s

        4)按钮的类型:UIBarButtonItem类型

             可以使用initWithTitle。。方法创建自定义

             文本内容的按钮

             可以使用initWithBarButtonSystemItem…方法创建系统定义好的,有固定外观的按钮

 

   1.6 配置工具栏

        访问工具栏:self.toolBarItems

        工具栏默认是隐藏的,修改以下属性可以显示

          

self.navigationController.toolbarHidden = NO;


        工具栏中加载的也是UIBarButtonItem类型的按钮

       

 

   1.7 特效按钮

       UIBarButtonSystemItemFixedSpace木棍效果:距离是固定的。通过修改barButton的width属性来调整按钮的宽度

       UIBarButtonSystemItemFlexibleSpace弹簧效果:距离是可变的,可以根据外在的宽度调整按钮所占的宽度

 

     1.8 推出新VC时,设置底部bar区域隐藏

       

bvc.hidesBottomBarWhenPushed = YES;


 

         1.9 导航控制器可以设置的属性的作用于范围

      属性:

          .title

          .navigationItem.leftBarButtonItem/s

          .navigationItem.rightBarButtonItem/s

          .toolbarItems

       以上四个属性的设置只负责当前所属的vc

 

      属性:

          .navigationController.toolbarHidden

        设置后,针对导航控制器管理的所有vc都生效

 

     1.10 问:在不同的vc中都可以访问self.navigationController,那么是同一个导航控制器吗?

         答:是

 

 

2. UIImageView

   数据类型:NSString —>UILabel 显示

              UIImage—>UIImageView 显示

 

   2.1 如何使用

      属性:

      contentMode用于设置内容显示的方式

       UIViewContentModeScaleToFill:

                修改宽高比,适应p_w_picpathView的区域大小,图片会被拉伸,不留白边

       UIViewContentModeScaleAspectFit:

                维持宽高比不变的情况下,将整张图片可见,由于图片的宽高比和设置的p_w_picpathView的frame的宽高比如果不协调的话,可能会留白边儿。

       UIViewContentModeScaleAspectFill:

                保持宽高比不变的情况下,将p_w_picpathView所占的区域填满,所以只会显示图片的一部分,不会留白

      【Demo2_UIImageView】

      属性:

        layer.cornerRadius设置圆角的半径

        layer.masksToBounds开启按边缘遮罩

 

3.UIScrollView

      3.1 作用:

        在有限的区域内,显示更多的数据或图片

 

     3.2 本质:

        管理view的view,scrollView本身没有任何的外观,依靠添加到scrollView中的其他视图来完成界面的显示

    

     3.3 如何使用

      【Demo3_UIScrollView】

        重要的属性:

         .frame 设置scrollView用多大的窗口来显示内容

         .contentSize设置了可滚动的区域的大小

         .contentOffset设置frame定点与内容的左顶点的偏移坐标

         .contentInset设置内容与边界之间的上、左、下、右的距离

        其他属性:

         .bounces 是否可以弹跳

         .showsHorizontalScrollIndicator

         .showsVerticalScrollIndicator

         .indicatorStyle

 

     3.4如何实现滚动视图内容的缩放

        step1:设置滚动内容缩放的最大比率

        step2:设置滚动内容缩放的最小比率

        step3:回答问题,说明scrollView里面的哪个子视图需要缩放

     

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

作业:

 

  1.视力检查器

     a。界面1:程序开始时,有一个检查视力的字母”E”一个Label显示E,font属性比较大.=[UIFont systemFontOfSize:100],界面下方有两个按钮,分别是看的清,看不清

     b。点击看的清,则推出第二个界面,第二个界面和第一个界面几乎一样,唯一不同的时E变小了,大小变成95

     c。点击看的清,继续推出第三个界面,E的字体继续变小,90 。。。 85 。。。 80.。。

     d。直到用户点击  了看不清,告诉他,视力是多少

     要求:必须是使用UINavigationController来控制vc的跳转,每次应该推出新的vc对象,而不是修改原来的vc对象

 

   2. 完成scrollView 对图片的缩放

 

 

   3.试做如 homework.png的效果图