广告
返回顶部
首页 > 资讯 > 移动开发 >iOS开发实现抽屉效果
  • 579
分享到

iOS开发实现抽屉效果

iOS抽屉 2022-11-13 14:11:11 579人浏览 八月长安
摘要

iOS开发之如何实现“抽屉”效果,供大家参考,具体内容如下 现在基本上每一个App中左划都会出现一个页面,基本上都是只占主页面的一部分,效果就像是一个抽屉一样

iOS开发之如何实现“抽屉”效果,供大家参考,具体内容如下

现在基本上每一个App中左划都会出现一个页面,基本上都是只占主页面的一部分,效果就像是一个抽屉一样。最近在写项目时,关于如何达到抽屉效果,总结了一些东西。
先看看效果图:

实现过程

首先我们需要去创建一个新的视图控制器,让它作为我们的要实现的抽屉的根视图,在此视图控制器我们要添加对应的左视图,要是需要右视图也可以添加,然后设定方法:

@property (nonatomic, strong) UIViewController *rootViewController;
//左侧视图
@property (nonatomic, strong) UIViewController *leftViewController;
//菜单宽度
@property (nonatomic, assign, readonly) CGFloat menuWidth;
//留白宽度
@property (nonatomic, assign, readonly) CGFloat emptyWidth;
//是否允许滚动
@property (nonatomic ,assign) BOOL slideEnabled;
//创建方法
-(instancetype)initWithRootViewController:(UIViewController*)rootViewController;
//显示主视图
-(void)showRootViewControllerAnimated:(BOOL)animated;
//显示左侧菜单
-(void)showLeftViewControllerAnimated:(BOOL)animated;

接着我们将定义的方法进行实现:

-(instancetype)initWithRootViewController:(UIViewController*)rootViewController{
    if (self = [super init]) {
        _rootViewController = rootViewController;
        [self addChildViewController:_rootViewController];
        [self.view addSubview:_rootViewController.view];
        [_rootViewController didMoveToParentViewController:self];
    }
    return self;
}

- (void)showLeftViewControllerAnimated:(BOOL)animated {
    if (!_leftViewController) {return;}
    [self.view sendSubviewToBack:_rightViewController.view];
    _coverView.hidden = false;
    [_rootViewController.view bringSubviewToFront:_coverView];
    [UIView animateWithDuration:[self animationDurationAnimated:animated] animations:^{
        _rootViewController.view.center = CGPointMake(_rootViewController.view.bounds.size.width/2 + self.menuWidth, _rootViewController.view.center.y);
        _leftViewController.view.frame = CGRectMake(0, 0, [self menuWidth], self.view.bounds.size.height);
        _coverView.alpha = MaxCoverAlpha;
    }];
}

然后我们需要添加一个分类,让它向前声明新的视图控制器,添加一个创建视图的方法使用懒加载:

- (XLSlideMenuViewController *)xl_sldeMenu {
    UIViewController *sldeMenu = self.parentViewController;
    while (sldeMenu) {
        if ([sldeMenu isKindOfClass:[XLSlideMenuViewController class]]) {
            return (XLSlideMenuViewController *)sldeMenu;
        } else if (sldeMenu.parentViewController && sldeMenu.parentViewController != sldeMenu) {
            sldeMenu = sldeMenu.parentViewController;
        } else {
            sldeMenu = nil;
        }
    }
    return nil;
}

然后我们在使用抽屉的时候,需要西安去设置根视图,然后将左侧视图初始化并将左视图添加在前边设置好的左视图属性上:

UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:tabBarControllerTest];
    nav.modalPresentationStyle = UIModalPresentationFullScreen;
    
    LeftViewController *leftVC = [[LeftViewController alloc] init];
    XLSlideMenuViewController *slideMenu = [[XLSlideMenuViewController alloc] initWithRootViewController:nav];
    slideMenu.leftViewController = leftVC;
    self.window.rootViewController = slideMenu;
    slideMenu.modalPresentationStyle = UIModalPresentationFullScreen;
    [self presentViewController:slideMenu animated:NO completion:nil];

最后在我们还可以添加点击事件,并且添加拖拽方法,使操作更加简单:

-(void)panChanged:(UIPanGestureRecognizer*)pan{
    //拖拽的距离
    CGPoint translation = [pan translationInView:self.view];
    //移动主控制器
    _rootViewController.view.center = CGPointMake(_originalPoint.x + translation.x, _originalPoint.y);
    //判断是否设置了左右菜单
    if (!_rightViewController && CGRectGetMinX(_rootViewController.view.frame) <= 0 ) {
        _rootViewController.view.frame = self.view.bounds;
    }
    if (!_leftViewController && CGRectGetMinX(_rootViewController.view.frame) >= 0) {
        _rootViewController.view.frame = self.view.bounds;
    }
    //滑动到边缘位置后不可以继续滑动
    if (CGRectGetMinX(_rootViewController.view.frame) > self.menuWidth) {
        _rootViewController.view.center = CGPointMake(_rootViewController.view.bounds.size.width/2 + self.menuWidth, _rootViewController.view.center.y);
    }
    if (CGRectGetMaxX(_rootViewController.view.frame) < self.emptyWidth) {
        _rootViewController.view.center = CGPointMake(_rootViewController.view.bounds.size.width/2 - self.menuWidth, _rootViewController.view.center.y);
    }
    //判断显示左菜单还是右菜单
    if (CGRectGetMinX(_rootViewController.view.frame) > 0) {
        //显示左菜单
        [self.view sendSubviewToBack:_rightViewController.view];
        //更新左菜单位置
        [self updateLeftMenuFrame];
        //更新遮罩层的透明度
        _coverView.hidden = false;
        [_rootViewController.view bringSubviewToFront:_coverView];
        _coverView.alpha = CGRectGetMinX(_rootViewController.view.frame)/self.menuWidth * MaxCoverAlpha;
    }else if (CGRectGetMinX(_rootViewController.view.frame) < 0){
        
        //更新遮罩层的透明度
        _coverView.hidden = false;
        [_rootViewController.view bringSubviewToFront:_coverView];
        _coverView.alpha = (CGRectGetMaxX(self.view.frame) - CGRectGetMaxX(_rootViewController.view.frame))/self.menuWidth * MaxCoverAlpha;
    }
}

然后左视图中的具体内容我们就可以自己去设置了,这样就达到了一个“抽屉”的效果。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: iOS开发实现抽屉效果

本文链接: https://www.lsjlt.com/news/172023.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • iOS开发实现抽屉效果
    iOS开发之如何实现“抽屉”效果,供大家参考,具体内容如下 现在基本上每一个App中左划都会出现一个页面,基本上都是只占主页面的一部分,效果就像是一个抽屉一样...
    99+
    2022-11-13
    iOS 抽屉
  • iOS开发实现简单抽屉效果
    本文实例为大家分享了iOS实现简单抽屉效果的具体代码,供大家参考,具体内容如下 抽屉效果的原理:其实就是把两个子控制器添加到一个RootViewController中,将子控制器的v...
    99+
    2022-11-13
    iOS 抽屉
  • iOS实现抽屉效果
    本文实例为大家分享了iOS实现抽屉效果的具体代码,供大家参考,具体内容如下 抽屉效果: #import "DragerViewController.h" #define sc...
    99+
    2022-05-18
    iOS 抽屉
  • iOS实现简单抽屉效果
    抽屉效果 所谓抽屉效果就是三个视图,向右拖拽显示左边的视图,向左拖拽显示右边的视图,当拖拽大于屏幕的一半时最上面的视图会自动定位到一边,当点击左边或右边视图时会最上面视图会自动复位。...
    99+
    2022-05-21
    iOS 抽屉
  • iOS实现简易的抽屉效果
    本文实例为大家分享了iOS实现简易的抽屉效果的具体代码,供大家参考,具体内容如下 1.添加需要实现抽屉效果的三个视图,这里需要注意主视图需要放在最后添加 // 左边视图  ... /...
    99+
    2022-11-13
    iOS 抽屉
  • Android开发之DrawerLayout实现抽屉效果
    谷歌官方推出了一种侧滑菜单的实现方式(抽屉效果),即 DrawerLayout,这个类是在Support Library里的,需要加上android-support-v4.jar这个包。使用注意点DrawerLayout的第一个子元素必须是...
    99+
    2023-05-31
    android drawerlayout roi
  • iOS简单抽屉效果的实现方法
    本文实例为大家分享了iOS实现简单抽屉效果的具体代码,供大家参考,具体内容如下 实现思路及步骤: 1、首先准备要滑动的view #warning 第一步 - (void)addChi...
    99+
    2022-11-13
    iOS 抽屉
  • flutter实现底部抽屉效果
    本文实例为大家分享了flutter实现底部抽屉效果的具体代码,供大家参考,具体内容如下 安卓:showModalBottomSheetIOS:showCupertinoModalPo...
    99+
    2022-11-13
  • Android SlidingDrawer 抽屉效果的实现
    SlidingDrawer隐藏屏外的内容,并允许用户通过handle以显示隐藏内容。它可以垂直或水平滑动,它有俩个View组成,其一是可以拖动的handle,其二是隐藏内容的V...
    99+
    2022-06-06
    抽屉 Android
  • Android实现右边抽屉Drawerlayout效果
    侧边栏是Android应用中很常见的一个界面效果(抽屉效果)。而利用DrawerLayout实现右侧栏是相对简单的。而且这个控件自带滑动效果,十分方便。 DrawerLay...
    99+
    2022-06-06
    drawerlayout Android
  • Android开发实现抽屉菜单
    本文实例为大家分享了Android开发实现抽屉菜单的具体代码,供大家参考,具体内容如下 实现效果 点击菜单图表即可进入抽屉 代码实现 1、打开app/build.gradle文件...
    99+
    2022-11-12
  • flutter如何实现底部抽屉效果
    小编给大家分享一下flutter如何实现底部抽屉效果,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体内容如下安卓:showModalBottomSheetIOS...
    99+
    2023-06-29
  • Android DrawerLayout实现抽屉效果实例代码
     官网:https://developer.android.com/training/implementing-navigation/nav-drawer.html ...
    99+
    2022-06-06
    drawerlayout 抽屉 Android
  • Android开发如何实现抽屉菜单
    这篇文章主要介绍Android开发如何实现抽屉菜单,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!实现效果点击菜单图表即可进入抽屉代码实现1、打开app/build.gradle文件,在dependencies闭包中添...
    99+
    2023-06-25
  • WPF实现抽屉菜单效果的示例代码
    WPF 实现抽屉菜单 框架使用大于等于.NET40;Visual Studio 2022;项目使用 MIT 开源许可协议;更多效果可以通过GitHub[1]|码云...
    99+
    2022-11-13
    WPF 抽屉菜单 WPF 菜单
  • Android应用中怎么实现一个抽屉效果
    这篇文章将为大家详细讲解有关Android应用中怎么实现一个抽屉效果,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。首先在layout 下设置xml布局文件<&#63;xml v...
    99+
    2023-05-31
    android roi
  • 利用DrawerLayout和触摸事件分发实现抽屉侧滑效果
    本文实例为大家分享了DrawerLayout和触摸事件分发实现抽屉侧滑效果的具体代码,供大家参考,具体内容如下效果展示 还是看代码实在,直接上菜了。 MainActivity的代码:public class MainActivity ext...
    99+
    2023-05-30
    drawerlayout 抽屉侧滑
  • iOS开发UICollectionView实现拖拽效果
    一.介绍 iOS9提供API实现单元格排序功能,使用UICollectionView及其代理方法。iOS9之后有自带方法可以实现该效果,只需添加长按手势,实现手势方法和调用iOS9的...
    99+
    2022-05-23
    iOS UICollectionView 拖拽
  • 怎么在Android应用中实现一个抽屉效果
    怎么在Android应用中实现一个抽屉效果?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。实现原理其实单就一个SwipeLayout的实现原理来讲的话,还是很简单...
    99+
    2023-05-31
    android roi
  • Android实现自定义滑动式抽屉效果菜单
    在Andoird使用Android自带的那些组件,像SlidingDrawer和DrawerLayout都是抽屉效果的菜单,但是在项目很多要实现的功能都收到Android这些自...
    99+
    2022-06-06
    自定义 菜单 抽屉 Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作