文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

iOS实现简易的抽屉效果

2022-11-13 14:33

关注

本文实例为大家分享了iOS实现简易的抽屉效果的具体代码,供大家参考,具体内容如下

1.添加需要实现抽屉效果的三个视图,这里需要注意主视图需要放在最后添加

// 左边视图
 ...
// 右边视图
  ...
// 主视图
    UIView *mainView=[[UIView alloc]initWithFrame:self.view.bounds];
    mainView.backgroundColor=[UIColor greenColor];
    _mainView=mainView;
    [self.view addSubview:mainView];

2.实现左滑显示左边视图,右滑出现右边视图

添加平移手势和点击手势,实现左右滑动的监听和点击复位的效果

// 添加平移手势
    UIPanGestureRecognizer *panGes=[[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panGes:)];
    [self.mainView addGestureRecognizer:panGes];
    // 添加点击返回手势
    UITapGestureRecognizer *tapGes=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tap)];
    [self.view addGestureRecognizer:tapGes];

在平移手势调用的方法中,通过偏移量来确定mainView的frame,实现动画效果

#define targetR 300
#define targetL -300
- (void)panGes:(UIPanGestureRecognizer *)panGes
{
    // 获取偏移量
    CGPoint tranP=[panGes translationInView:self.mainView];
    // 获得位移后的视图
    self.mainView.frame=[self frameWithOffsetX:tranP.x];
    // 判断拖动方向
    if (self.mainView.frame.origin.x<0) {//向左
        self.rightView.hidden=NO;
    }else if(self.mainView.frame.origin.x>0)
    {// 向右
        self.rightView.hidden=YES;
    }
    // 当手指松开时,做自动定位
    CGFloat target=0;
    if (panGes.state==UIGestureRecognizerStateEnded) {
        if (self.mainView.frame.origin.x>0.5*screenW) {
            target=targetR;
        }else if(CGRectGetMaxX(self.mainView.frame)<0.5*screenW)
        {
            target=targetL;
        }
        //offset为当前点到其目标点的位移
        CGFloat offset=target-self.mainView.frame.origin.x;
        [UIView animateWithDuration:0.5 animations:^{
            self.mainView.frame=[self frameWithOffsetX:offset];
        }];
    }

    // 复位
    [panGes setTranslation:CGPointZero inView:self.mainView];

}
#define maxY 120
// 根据mainView在X轴方向位移确定mainView的尺寸
- (CGRect)frameWithOffsetX:(CGFloat)offsetX
{
    CGRect frame=self.mainView.frame;

    frame.origin.x+=offsetX;

    frame.origin.y=fabs(frame.origin.x / screenW * maxY);

    frame.size.height=screenH - frame.origin.y * 2;

    return frame;
}

3.如何让其他文件也能实现抽屉效果

// 当一个控制器的View添加到另一个控制器的View上的时候,那此时View所在的控制器也应该成为上一个控制器的子控制器.
    AZTableViewController *vc1=[[AZTableViewController alloc]init];
    vc1.view.frame=self.mainView.bounds;
    [self.mainView addSubview:vc1.view];
    [self addChildViewController:vc1];

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

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯