寻求iOS可滑动左侧侧边栏(带首页高斯模糊)Objective-C框架
推荐适配Objective-C的iOS侧边栏框架(带高斯模糊效果)
针对你的需求,我整理了几个社区认可度高、完全支持Objective-C的iOS框架,能完美实现左箭头点击/右滑打开左侧侧边栏,同时支持滑动过程中主视图的高斯模糊效果:
1. MMDrawerController
这是一款老牌且稳定的侧边栏框架,文档齐全、自定义性强:
- 原生支持右滑手势打开左侧侧边栏,同时可轻松绑定左箭头按钮的点击事件来触发侧边栏展开
- 实现高斯模糊效果:利用框架提供的滑动进度回调,动态控制主视图的模糊强度,示例代码如下:
// 初始化抽屉控制器 MMDrawerController *drawerController = [[MMDrawerController alloc] initWithCenterViewController:centerVC leftDrawerViewController:leftVC]; // 开启右滑打开侧边栏的手势 drawerController.openDrawerGestureModeMask = MMOpenDrawerGestureModePanningCenterView; drawerController.closeDrawerGestureModeMask = MMCloseDrawerGestureModePanningCenterView; // 监听滑动进度,添加/更新高斯模糊效果 [drawerController setDrawerVisualStateBlock:^(MMDrawerController *drawerController, MMDrawerSide drawerSide, CGFloat percentVisible) { if (percentVisible > 0) { UIVisualEffectView *blurView = (UIVisualEffectView *)[drawerController.centerViewController.view viewWithTag:999]; if (!blurView) { blurView = [[UIVisualEffectView alloc] initWithEffect:[UIBlurEffect effectWithStyle:UIBlurEffectStyleLight]]; blurView.tag = 999; blurView.frame = drawerController.centerViewController.view.bounds; [drawerController.centerViewController.view addSubview:blurView]; } blurView.alpha = percentVisible; } else { // 收起侧边栏时移除模糊视图 for (UIView *subview in drawerController.centerViewController.view.subviews) { if (subview.tag == 999) { [subview removeFromSuperview]; } } } }];
2. SWRevealViewController
这款框架是Objective-C生态中流行的侧边栏解决方案,轻量易集成:
- 内置支持右滑打开左侧侧边栏,可通过
revealToggle:方法直接绑定左箭头按钮的点击事件 - 实现高斯模糊效果:通过KVO监听侧边栏的展开进度,动态调整模糊视图的透明度,示例代码:
// 初始化侧边栏控制器 SWRevealViewController *revealVC = [[SWRevealViewController alloc] initWithRearViewController:leftVC frontViewController:centerVC]; // 绑定左箭头按钮事件 UIBarButtonItem *leftArrowBtn = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"left-arrow"] style:UIBarButtonItemStylePlain target:revealVC action:@selector(revealToggle:)]; centerVC.navigationItem.leftBarButtonItem = leftArrowBtn; // 监听侧边栏展开进度 [revealVC addObserver:self forKeyPath:@"rearViewPosition" options:NSKeyValueObservingOptionNew context:nil]; // KVO回调处理模糊效果 - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context { if ([keyPath isEqualToString:@"rearViewPosition"]) { SWRevealViewController *revealVC = (SWRevealViewController *)object; CGFloat blurAlpha = revealVC.rearViewPosition / revealVC.rearViewRevealWidth; UIVisualEffectView *blurView = (UIVisualEffectView *)[centerVC.view viewWithTag:100]; if (!blurView) { blurView = [[UIVisualEffectView alloc] initWithEffect:[UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]]; blurView.tag = 100; blurView.frame = centerVC.view.bounds; [centerVC.view addSubview:blurView]; } blurView.alpha = blurAlpha; } }
这两个框架都能很好地匹配你的需求,你可以根据项目的风格和自定义需求选择。如果需要更精细化的效果,也可以基于它们进行二次开发。
内容的提问来源于stack exchange,提问作者Drashti
相关产品推荐
相关产品推荐

