首页 工作资料 边总结边分析边|边总结边完善

边总结边分析边|边总结边完善

边总结边分析边

边总结边分析边 第1篇

现在将注意力放回到viewDidLoad方法的下列代码中:

边总结边分析边|边总结边完善

这里的leftMenuViewController等三个控制器都包含一个sideMenuViewController的成员,并让其指向self。那么是不是每一个视图控制器都要添加一个JCSideMenuViewController的属性呢?哇靠,太麻烦了吧。没错,如果让我来做的话,我只会这种方法。

但是原项目却给出了一个非常好的解决方案:在JCSideMenuViewController头文件中声明一个UIViewController的Category,并在类别中将JCSideMenuViewController和UIViewController动态关联起来。

首先要导入头文件:

SDK中关于objc_setAssociatedObject函数的定义如下:

第二个参数key表示二者关联的方式,在这里我们用@selector(sideMenuViewController)将其关联起来,该key用于获取被关联对象。

第三个参数表示要关联的对象,也就是sideMenuViewController。

第四个参数表示关联的策略,这里使用的是OBJC_ASSOCIATION_ASSIGN。

接下来是获取关联对象的函数,在sdk中定义如下:

边总结边分析边 第2篇

首先来看看JCSideMenuViewController的初始化过程,包括init方法和viewDidLoad方法。代码如下:

为了防止崩溃,在viewDidLoad方法中首先要判断这几个视图控制器是否为空。

在viewDidLoad方法中,我们做的就是将三个视图控制器的视图添加到JCSideMenuViewController的根视图上,而初始的MenuViewControllers的视图均设置为隐藏。

后面添加的两个轻扫手势swipeGesture的作用是关闭菜单。

边总结边分析边 第3篇

可以基于JCSideMenuViewController实现传统的侧边菜单形式。

下面给出我的做法:

首先定义kZoomScale = (如果想使用原来的菜单样式,只需要将下面的#if 0修改为#if 1)

实现效果如下:

当然,在菜单栏后面设置背景图片会占用一定的内存(iPhone真机调试13M左右),所以最好还是使用一些透明背景比较好,节省内存而又不影响美观。

最后还是附上源码,交流学习。

JCSideMenuViewControllerDemo下载地址:点此进入下载页

最后总结一下我从这个项目的源码分析中学习到的一些知识:

1.结构体初始化:

2.在项目中使用委托方法:

3.使用UIViewController Category关联类

这个是本次源码分析的最大收获,这确实是一个非常棒的设计模式,学习了。

4.仿射变换和animation方法

7的StatusBarStyle和屏幕旋转后的视图适配

和swipe手势

pan和swip手势在入门时用过,当时也是一知半解,并且早就忘得七七八八了,而且当时也没有写博客记录,幸好本次学习好好回顾了一下。

在UIPanGestureRecognzier类中:

其中translation记录了pan手势的平移轨迹,velocity记录了pan手势的速度。

7.translatesAutoresizingMaskIntoConstraints属性的作用是禁止将视图的AutoresizingMask转换成Autolayout。

NSENUM

接下来还会看更多的项目和类库,看了以后会继续更新博客。

热门文章