最近自己实现了一个侧滑功能的demo,拿出来给大家分享一下。
这个侧滑的实现原理是一个主控制器,还有一个副控制器。当需要显示侧滑效果的时候,主控制器的view缩小并滑动到侧边,父控制器的view添加到window上,这样就实现了一个侧滑的效果。
1、创建一个类,继承UINavigationController,并重写构造方法
-(instancetype)initWithRootViewController:(UIViewController *)rootViewController;
在构造方法中对需要初始化的实例进行初始化。
2、提供两个方法
-(void)openView 开启侧滑
-(void)closeView 关闭侧滑
主要的代码
-(void)openView { [self.view.window insertSubview:_leftMenu.view atIndex:0]; [UIView animateWithDuration:0.5 animations:^{ CGAffineTransform newTransform = CGAffineTransformScale(self.view.transform, SCALE, SCALE); [self.view setTransform:newTransform]; CGRect rect = self.view.frame; self.view.center = CGPointMake(self.view.frame.origin.x + self.view.frame.size.width / 2, self.view.frame.origin.y + self.view.frame.size.height / 2); rect.origin.x = SCREEN_MAX_WEITH - 100; rect.origin.y = 64; self.view.frame = rect; }]; [self.view.window addSubview:_rightView]; } -(void)closeView { [UIView animateWithDuration:0.5 animations:^{ CGAffineTransform newTransform = CGAffineTransformScale(self.view.transform, 100.0f / (SCALE * 100), 100.0f / (SCALE * 100)); [self.view setTransform:newTransform]; CGRect rect = self.view.frame; self.view.center = CGPointMake(self.view.frame.origin.x + self.view.frame.size.width / 2, self.view.frame.origin.y + self.view.frame.size.height / 2); rect.origin.x = 0; rect.origin.y = 0; self.view.frame = rect; } completion:^(BOOL finished) { [_rightView removeFromSuperview]; }]; }
3、提供一个方法,用于跳转页面
-(void)pushController:(UIViewController *)viewController;
以上便是demo侧滑实现的主要逻辑了。
效果如下图
demo下载地址https://github.com/LuShui/leftMenu
时间: 2024-11-09 07:21:01