Closed gdfyj90 closed 6 years ago
你好,我仔细思考了你的建议,设计成单例会有一点不好,因为每个动画都会涉及到Configuration这个参数,如果设计成单例,比如我有两个抽屉 左侧滑出和右侧滑出的两个抽屉,那在这种情况下Configuration单例的话就得每次都配置一下Configuration里面的参数,不然在右侧滑出时改了Configuration,在左侧滑出用默认的就gaygay了。。且从设计上来说最好还是一个动画效果配一个配置选项。distance这个参数我里面写的默认是屏幕宽的0.75,如果你没有修改过distance这个参数,无论哪个Configuration通过get方法取的都会是屏幕宽的0.75。。我在get方法里面做了一定的容错处理,你做布局可以按照这个尺寸做,如果修改过distance的话,可以把这个distance的值写成一个宏或者常量来做对应的布局。。😁
另外我发现了一个问题,如果修改了你的distance,在ipad上左侧栏出现后(无遮盖的)在里面present的话,返回时会闪一下(就是侧边栏的宽度从你的0.75屏幕变成我设置的值)。而且能否做成弹出新界面后侧栏消失呢
闪一下这个原因是否是因为左侧栏的subView的宽度和左侧栏显示的宽度不一样导致的,比如我demo里左侧栏的距离是屏幕的0.75,然后里面的tableview的宽度也只设置了屏幕的0.75,你看看修改distance的时候把subView的宽度也设置成对应的宽度试试还会不会,因为宽度设置成不一样的也没意义,反正多余的也显示不出来。然后你所说的弹出新界面之后侧栏消失,可以先调用收起侧栏然后再弹出新界面,不过这样会有两个动画过程(收起侧滑与弹出新界面),理论上这两个动画过程是不可避免的,可能体验就没那么好。。
既然有这个需求,待会看看有木有好的解决方式
你说的修改对应的宽度是指leftVC里面viewdidiappear那一段吗,如果是的话我改了还是会出现的。。 目前我就是先调用收起侧栏然后再弹出新界面的,顺便就把闪一下的bug隐藏掉了,因为侧栏已经收起了,新界面返回时自然不会闪
另外单例的问题我觉得还是可以加上这个接口的,我现在的业务需求是一级界面的顶部全部都要有按钮可以展开左侧栏,然后我就发现每个一级界面都要写自定义的CWLateralSlideConfiguration了,毕竟我是用pod的不是用源码,用源码的话就可以直接改你那个defaultConfiguration里面的参数了。当然你提出的也有道理。
我说的修改宽度不是viewdidiappear里的,实际上用的CWDrawerAnimationTypeDefault的动画,present的时候只要在viewdidiappear加一行代码就好了([self.view.superview sendSubviewToBack:self.view];)另外一个case设置的宽度是不相关的,demo只是为了演示多种情况而写的。。然后我说的修改对应宽度是指在viewDidLoad里面创建子view再addSubview的这个步骤,看看创建的view的宽度是否和distance相对应,比如下面这个代码:
- (void)setupTableView {
// 设置tableview的宽度为kCWSCREENWIDTH * 0.75 这个值和distance的值是一样的
UITableView *tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 300, kCWSCREENWIDTH * 0.75, CGRectGetHeight(self.view.bounds)-300) style:UITableViewStylePlain];
......
[self.view addSubview:tableView];
}
然后很多地方要侧滑抽屉,其实挺好发挥的,看看你有木有共用的父控制器,类似baseViewController这种,有的话直接一个共用的方法写在这个里面就好啦,如果有自定义的导航控制器并且就在导航控制器添加所有一级页面的左侧按钮,也可以直接一个写在导航控制器内,这个要看你的项目是如何设计的啦。只要把几个方法统一了,就能只写一次defaultConfiguration以及只写一个显示抽屉的方法,然后单例这个真的没必要,因为你这种情况会在多个地方出现同样的代码可以自己优化封装一下,但是另外的场景左右抽屉这种加了单例就只能按照我写的套路走了,局限性会大一点,其次一般情况下,能不用单例解决问题的就尽量不用单例。。可能你的这种场景比较合适用单例,但是还是要综合考虑一下其他的场景,还有我最好的建议当然是能把多个控制器内的同样方法写成一个方法,这样比使用单例更好。。😁
感觉应该写成单例啊,我在leftviewcontroller里做自动布局,需要用到Configuration的distance属性。现在只能自己手动写个数值