iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >如何使用iOS实现仿高德首页推拉效果
  • 672
分享到

如何使用iOS实现仿高德首页推拉效果

2023-06-25 14:06:06 672人浏览 安东尼
摘要

这篇文章主要介绍了如何使用iOS实现仿高德首页推拉效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。上面是实现的效果,滑动的视图是新建的一个UIView子类1、滑动view的

这篇文章主要介绍了如何使用iOS实现仿高德首页推拉效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

如何使用iOS实现仿高德首页推拉效果

上面是实现的效果,滑动的视图是新建的一个UIView子类

1、滑动view的调用

SlideView * slideView = [[SlideView alloc] initWithFrame:CGRectMake(0, kScreenHeight-140, kScreenWidth, kScreenHeight-100)];    slideView.topH = 100;    [self.view addSubview:slideView];

SlideView是新建的一个UIView子类

kScreenHeight屏幕高

kScreenWidth屏幕宽

topH是视图滑动到顶部时距离屏幕顶部的距离

注意点:SlideView的高应该是屏幕的高减去topH,否则视图滑到顶部时高会有点不适配的问题

2、为视图添加滑动手势和tableview相关配置

UIPanGestureRecognizer * panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panAction:)];    panGestureRecognizer.delegate = self;    [self addGestureRecognizer:panGestureRecognizer];
self.tableView.bounces = NO;    self.tableView.userInteractionEnabled = NO;

tableView必须加上上面这两个属性

userInteractionEnabled属性是用来阻止当视图在底部时禁止tableview上的手势的,不加这个属性时会导致视图在底部时会响应tableview向上滚动的事件,从而导致视图无法整体向上滑动。当视图滑到顶部时又需要把userInteractionEnabled设为YES,否则tableview无法向上滚动。如果在底部时tableview并没有展示出来,展示的只是一些其他的控件就可以不需要设置这个属性
bounces设为NO是为了阻止tableview滚动到顶部时还能响应自己的向下拉的事件,从而去响应整个视图的向下滑到手势。

3、设置允许同时响应多个手势

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {    return YES;}

这个允许同时响应多个手势是必须的,否则视图的手势会被tableview的事件覆盖掉。

4、滑动相关逻辑处理

在scrollViewDidScroll中获取tableview偏移量,记录下来

-(void)scrollViewDidScroll:(UIScrollView *)scrollView{    CGFloat currentPostion = scrollView.contentOffset.y;    self.stop_y = currentPostion;}

滑动手势的处理

self.top是视图的self.frame.origin.y,我这边是写在了分类中。

self.bottomH在视图初始时将self.top赋值给了self.bottomH

在视图滑动过程中对速度和距离做了判断,根据速度和距离将视图滑动到底部和顶部

- (void)panAction:(UIPanGestureRecognizer *)pan{    // 获取视图偏移量    CGPoint point = [pan translationInView:self];    // stop_y是tableview的偏移量,当tableview的偏移量大于0时则不去处理视图滑动的事件    if (self.stop_y>0) {        // 将视频偏移量重置为0        [pan setTranslation:CGPointMake(0, 0) inView:self];        return;    }        // self.top是视图距离顶部的距离    self.top += point.y;    if (self.top < self.topH) {        self.top = self.topH;    }        // self.bottomH是视图在底部时距离顶部的距离    if (self.top > self.bottomH) {        self.top = self.bottomH;    }        // 在滑动手势结束时判断滑动视图距离顶部的距离是否超过了屏幕的一半,如果超过了一半就往下滑到底部    // 如果小于一半就往上滑到顶部    if (pan.state == UIGestureRecognizerStateEnded || pan.state == UIGestureRecognizerStateCancelled) {                // 滑动速度        CGPoint velocity = [pan velocityInView:self];        CGFloat speed = 350;        if (velocity.y < -speed) {            [self GoTop];            [pan setTranslation:CGPointMake(0, 0) inView:self];            return;        }else if (velocity.y > speed){            [self goBack];            [pan setTranslation:CGPointMake(0, 0) inView:self];            return;        }                if (self.top > kScreenHeight/2) {            [self goBack];        }else{            [self goTop];        }    }        [pan setTranslation:CGPointMake(0, 0) inView:self];}

滑动到底部和顶部的事件

滑到底部时需要userInteractionEnabled设为NO,取消掉tableview的响应事件。滑到顶部时再将userInteractionEnabled设为YES

- (void)goTop {    [UIView animateWithDuration:0.5 animations:^{        self.top = self.topH;    }completion:^(BOOL finished) {        self.tableView.userInteractionEnabled = YES;    }];}- (void)goBack {    [UIView animateWithDuration:0.5 animations:^{        self.top = self.bottomH;    }completion:^(BOOL finished) {        self.tableView.userInteractionEnabled = NO;    }];}

4、注意点

因为在底部时给tableview的serInteractionEnabled属性设置了NO,这将导致tableview上的所有事件都被取消了,包括cell的选中。如果想保留这个属性,则可以在scrollViewDidScroll中增加[scrollView setContentOffset:CGPointMake(0, 0)]
同时将代码中的serInteractionEnabled全部注释掉就可以了。

-(void)scrollViewDidScroll:(UIScrollView *)scrollView{    CGFloat currentPostion = scrollView.contentOffset.y;    self.stop_y = currentPostion;        if (self.top>self.topH) {        [scrollView setContentOffset:CGPointMake(0, 0)];    }}

感谢你能够认真阅读完这篇文章,希望小编分享的“如何使用iOS实现仿高德首页推拉效果”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网精选频道,更多相关知识等着你来学习!

--结束END--

本文标题: 如何使用iOS实现仿高德首页推拉效果

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

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

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

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

下载Word文档
猜你喜欢
  • 如何使用iOS实现仿高德首页推拉效果
    这篇文章主要介绍了如何使用iOS实现仿高德首页推拉效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。上面是实现的效果,滑动的视图是新建的一个UIView子类1、滑动view的...
    99+
    2023-06-25
  • HTML怎么实现仿拉勾网首页穿墙广告效果
    本篇内容主要讲解“HTML怎么实现仿拉勾网首页穿墙广告效果”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“HTML怎么实现仿拉勾网首页穿墙广告效果”吧! ...
    99+
    2024-04-02
  • Android如何实现京东首页效果
    这篇文章主要介绍了Android如何实现京东首页效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。本文实例为大家分享了Android实现京东首页效果的具体代码,供大家参考,具...
    99+
    2023-06-15
  • 如何使用jquery实现拖拉效果
    这篇文章给大家分享的是有关如何使用jquery实现拖拉效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。使用jquery实现拖拉效果的方法:1、使用“$("#元素id值...
    99+
    2024-04-02
  • angularjs如何实现首页轮播图效果
    这篇文章给大家分享的是有关angularjs如何实现首页轮播图效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体内容如下<!DOCTYPE html> ...
    99+
    2024-04-02
  • Android如何实现仿iOS菊花加载圈动画效果
    这篇文章主要介绍了Android如何实现仿iOS菊花加载圈动画效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。常见的实现方式切图,做旋转动画自定义View,绘制效果gif图...
    99+
    2023-06-15
  • jQuery如何实现图片推拉门动画效果
    这篇文章主要介绍了jQuery如何实现图片推拉门动画效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。实现方法一:改变图片宽度html+cs...
    99+
    2024-04-02
  • ajax翻页效果模仿yii框架如何实现
    这篇文章主要介绍了ajax翻页效果模仿yii框架如何实现,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。<!DOCTYPE h...
    99+
    2024-04-02
  • JavaScript如何实现首页图片轮播图效果
    这篇文章主要介绍“JavaScript如何实现首页图片轮播图效果”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaScript如何实现首页图片轮播图效果”文章能帮助大家解决问题。一、轮番图效果展...
    99+
    2023-07-02
  • 如何使用Android实现上拉吸顶效果
    这篇文章给大家分享的是有关如何使用Android实现上拉吸顶效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体内容如下效果图1.home_layout.xml此布局即可实现上拉标题固定在顶部<xml&n...
    99+
    2023-06-29
  • Android如何实现仿日历翻页、仿htc时钟翻页、数字翻页切换效果
    这篇文章主要为大家展示了“Android如何实现仿日历翻页、仿htc时钟翻页、数字翻页切换效果”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Android如何实现仿日历翻页、仿htc时钟翻页、数...
    99+
    2023-05-31
    android
  • 如何使用Mybatis实现分页效果
    这篇文章主要介绍如何使用Mybatis实现分页效果,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、创建分页的工具类PageUti,存储分页所需要的五个数据:pageIndex(当前页码),pageSize(每页记录...
    99+
    2023-06-21
  • CSS如何实现页面中的列表收拉效果
    这篇“CSS如何实现页面中的列表收拉效果”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“CSS如何实现页面中的列表收拉效果”文...
    99+
    2023-06-27
  • 基于vue2.0如何实现仿百度前端分页效果
    这篇文章主要介绍了基于vue2.0如何实现仿百度前端分页效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。先看实现效果图代码实现按照惯例,我...
    99+
    2024-04-02
  • recycleview如何实现拼多多首页水平滑动效果
    这篇文章给大家分享的是有关recycleview如何实现拼多多首页水平滑动效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。本文实例为大家分享了recycleview实现拼多多首页水平滑动效果的具体代码,供大家参...
    99+
    2023-06-15
  • 微信小程序如何实现下拉刷新和上拉分页效果
    这篇文章主要介绍“微信小程序如何实现下拉刷新和上拉分页效果”,在日常操作中,相信很多人在微信小程序如何实现下拉刷新和上拉分页效果问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”微信小程序如何实现下拉刷新和上拉分...
    99+
    2023-06-30
  • 如何使用jquery实现页面弹球效果
    这篇文章主要为大家展示了“如何使用jquery实现页面弹球效果”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用jquery实现页面弹球效果”这篇文章吧。具体内容如下像windows屏保一样...
    99+
    2023-06-26
  • 如何使用CSS实现Tab页切换效果
    这篇文章主要介绍如何使用CSS实现Tab页切换效果,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!三种写法:利用 :hover 选择器缺点:只有鼠标在元素上面的时候才有效果,无法实现选中和默认显示某一个的效果利用 a标...
    99+
    2023-06-08
  • 如何使用JS组件Bootstrap实现下拉菜单效果
    这篇“如何使用JS组件Bootstrap实现下拉菜单效果”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“如何使用JS组件Boo...
    99+
    2023-07-04
  • 如何使用div+css实现网站首页
    这篇文章主要介绍如何使用div+css实现网站首页,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!<!DOCTYPE html><html><head&g...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作