网易新闻练习

网易新闻练习

网易新闻

从架构上来看, 史一个根控制器上有两个侧边视图, 还要一个导航控制器来显示主页, 之后回有更多的控制器, 点击跳转过去
左边视图的设计: view上创建几个按钮, (可以将按钮的创建方法封装起来, 创建按钮操作很频繁) 设置好大小和距离, 内容边距. 关于按钮背景色史选中才出现, 关于状态只能用image, 所以要用CG来创建一个纯色的图片返回来用
同样的在自己用的控制器要封装起来    关于title可以将一个button封装起来, 在本项目的其他的控制器中可以重复使用, 只是标题不同嘛
点击显示左边菜单: 新闻控制器view应该右滑和菜单贴边高度一样, 要注意缩放时回将平移距离也缩放了, 要乘回来, 计算平移的距离比较麻烦
控制器的切换:
    在点击按钮的时候, 传出按钮的tag给代理, main控制器移除原来的控制器.view, add新的控制器.view
    可以尝试设置一个showView属性, 切换时就切换showView所指的控制器, 不过要想同时看到隐藏一个显示一个的效果的化, 就不能这样
    將設置子控制器抽出來放到main控制器里, 可以统一设置子控制器的主题, titleView, 左右按钮等, 并为其包装导航控制器, 添加到自己main控制器的子控制器中, 左右按钮的点击事件拿到main控制器中, 这样就从main控制器的层面来切换子控制器, 就想tabbarController一样
    将要移除的控制器的transform赋值给要显示的控制器, 在用动画把transform清空, 就能有动画效果回到原位置
    在需要清空transform的时候, 可以直接调用点击遮盖, 等同的效果, 不要重复做
    需要对选择view中的按钮做适配, 让它点下去就显示背景, 取消按下高亮状态时系统对按钮做的操作,--自定义按钮中重写hight方法,什么都不做
    bug: 当一个导航控制器的View首次显示到其父控件上时, 如果transform的缩放值被改来, 上面的20高度当时是不会出来的 ---- 调换下顺序就可以, 在修改值之前, 先添加到父控件上,
    将按钮贴边: 遍历导航栏的子控件, 看按钮的x值来判断左右按钮, 再将按钮的x值更改, 应该在控制器的viewDidLayoutSubViews方法中更改
        但是有点问题, 会看到按钮的移动
        最终的解决方案: 自定义导航栏替换掉导航控制器自带的导航栏, 用KVC替换, 在自定义导航栏里设置子控件的位置
        猜想: 导航栏中item有没有对应的设置来设置缩进位置的

显示右边的菜单:
    如果一个view里的业务逻辑比较多比较复杂, 我们可以用一个控制器来管理这些事件, 而不是将view的事件丢给底层的控制器
    用xib将右边菜单做出来, 因为相对固定
    菜单位置和左边菜单相似, 方向和宽度不一样, 最好用2个属性拥有这两个菜单, 当一个显示时, 另一个隐藏
    菜单中图标的 反转:
        CATransform矩阵
        转场动画transition  (之后要把之前项目中的笔记搬到这里来) 从uiview来做的动画比较有限, 更多的化可以用transition这个类来做
    按钮点击亮点, 自带的一个属性, showhighlightWhenTouched = yes 就行

bug: CUICatalog: Invalid asset name supplied: (null), or invalid scale factor: 2.000000 —– This one appears when someone is trying to put nil eventually in [UIImage imageNamed:] 给UIImage imageNamed:nil]传nil的话就会这样….要判断一下

bug: 当transform的时候, 有时候直接make(a,b,c,d)不一定好使, 在相同参数的情况下, 分步来做的结果不一样,

    showView.transform = CGAffineTransformMake(scale, 0, 0, scale, -kRightMenuW*scale, 0);
    上面这句就和下面的分步结果不一样
CGAffineTransform scaleForm = CGAffineTransformMakeScale(scale, scale);
// 平移
CGAffineTransform translateForm = CGAffineTransformTranslate(scaleForm, -transX / scale, 0);

showView.transform = translateForm;

bug: 在自定义view的时候, - (void)layoutSubviews中设置self.frame中的属性, 会死循环….YCRightMenuMidView的时候, 其他的倒是不会, 应该用了enumerateObjectsUsingBlock:^(YCRightMenuMidViewRow row, NSUInteger idx, BOOL stop) {的原因, 改成for循环问题解决