边总结边分析边 第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
接下来还会看更多的项目和类库,看了以后会继续更新博客。
55律网来源链接:https://www.
本文来自管理员投稿,不代表资源分享网立场,如若转载,请注明出处:http://duduzhe.cn/fbf69C2pQVgdXAl0.html
发表回复
评论列表(0条)