<>强导读强>
简单用迅速写了一个抽屉效果,可以直接使用并且简单,
很多软件都运了抽屉效果,比如qq的左抽屉,英雄联盟,滴滴打车,和乳房等等都运用了抽屉;
<>强效果强>
view.addSubview (leftMenuVC.view) view.addSubview (mainVC.view) addChildViewController (leftMenuVC) addChildViewController (mainVC) >之前
然后首先实现点击方法openLeftMenu和closeLeftMenu(这两个方法主要是计算mainVC的视图的位置)方便以后调用。
//马克:- - - - - -打开左侧菜单 func openLeftMenu () { UIView。动画(withDuration: 0.25,延迟:0,选项:UIViewAnimationOptions。curveLinear动画:{ self.leftVC& # 63; .view。变换=CGAffineTransform.identity self.mainVC& # 63; .view。变换=CGAffineTransform (translationX:自我。maxWidth y: 0) 完成}:{ (完成:Bool)→() self.mainVC& # 63; .view.addSubview (self.coverBtn) }) }//标记:关闭左侧菜单 func closeLeftMenu () { UIView。动画(withDuration: 0.25,延迟:0,选项:UIViewAnimationOptions。curveLinear动画:{ self.leftVC& # 63; .view。变换=CGAffineTransform (translationX:自我。maxWidth y: 0) self.mainVC& # 63; .view。变换=CGAffineTransform.identity 完成}:{ (完成:Bool)→() self.coverBtn.removeFromSuperview () }) } >之前最后给mainVC的视图中添加屏幕边缘手势,实现mainVC的观点跟随手指移动。循环遍历视图给每一个一级视图添加手势
在(childViewController mainVC& # 63; .childViewControllers) !{ addScreenEdgePanGestureRecognizerToView(视图:childViewController.view) } >之前//标记:添加屏幕边缘手势 私人func addScreenEdgePanGestureRecognizerToView(视图:UIView) { 让潘=UIScreenEdgePanGestureRecognizer(目标:自我,行动:#选择器(edgPanGesture (_:))) 平底锅。边缘=UIRectEdge.left view.addGestureRecognizer (pan) } >之前在平移手势调用的方法中,通过偏移量来确定mainView的框架,实现动画效果
<李>首先通过锅。翻译(:pan.view)。x方法获取偏移量,通过偏移量的正负确定拖动的方向李> <李>当手指松开后需要根据mainView的x值确定其视图是定位到原始位置还是其缩放的位置李>
打开手势
//标记:屏幕左边缘手势 func edgPanGesture(_潘:UIScreenEdgePanGestureRecognizer) { 让offsetX=锅。翻译:pan.view方式 如果锅。==UIGestureRecognizerState状态。改变,,offsetX & lt;=maxWidth { mainVC& # 63; .view。变换=CGAffineTransform (translationX:马克斯(offsetX, 0), y: 0) leftVC& # 63; .view。变换=CGAffineTransform (translationX: maxwidth + offsetX y: 0) }如果锅。==UIGestureRecognizerState状态。结束了| |平底锅。==UIGestureRecognizerState状态。取消了| |平底锅。==UIGestureRecognizerState状态。{失败 如果offsetX比;screenW * 0.5 { openLeftMenu () 其他}{ closeLeftMenu () } } } >之前关闭遮盖手势
//马克:——遮盖按钮手势 func panCloseLeftMenu(_潘:UIPanGestureRecognizer) { 让offsetX=锅。翻译:pan.view方式 如果offsetX比;0{返回} 如果锅。==UIGestureRecognizerState状态。改变,,offsetX祝辞=maxwidth { 让distace=maxWidth + offsetX mainVC& # 63; .view。变换=CGAffineTransform (translationX: distace y: 0) leftVC& # 63; .view。变换=CGAffineTransform (translationX: offsetX y: 0) }如果锅。==UIGestureRecognizerState状态。结束了| |平底锅。==UIGestureRecognizerState状态。取消了| |平底锅。==UIGestureRecognizerState状态。{失败 如果offsetX比;screenW * 0.5 { openLeftMenu () 其他}{ closeLeftMenu () } } }IOS中迅速仿QQ最新版抽屉侧滑和弹框视图