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

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

本文主要介绍如何利用iOS实现模仿高德主页的推拉效果,具有一定的参考价值。有兴趣的朋友可以参考一下。希望大家看完这篇文章后收获多多。让边肖带你去了解一下。

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

以上是实现效果,滑动视图是新创建的UIView子类。

1、滑动view的调用

slide view * slide view=[[slide view alloc]initwithframe : cgrectmake(0,ksscreenheight-140,kScreenWidth,ksscreenheight-100)];

slideView.topH=100

[self . viewpaddsubview : slideview];SlideView是UIView的一个新子类。

屏幕高度屏幕高度

Ksheenwidth屏幕宽度

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

注意:SlideView的高度应该是屏幕的高度减去topf,否则当视图滑动到顶部时,高度会有点不合适。

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

UIPanGestureRecognizer * panGestureRecognizer=[[UIPanGestureRecognizer alloc]initwithtargets : self action : @ selector(panact :)];

pangesturerecognizer . delegate=self;

[self addgesturerecognizer : pangesturerecognizer];self . tableview . bounds=NO;

self . tableview . useinteractionenabled=NO;TableView必须添加上述两个属性。

userInteractionEnabled属性用于防止在视图位于底部时禁止tableview上的手势。如果未添加此属性,视图将响应tableview位于底部时向上滚动的事件,从而导致视图整体无法向上滑动。当视图滑动到顶部时,您需要将userInteractionEnabled设置为YES,否则表格视图无法向上滚动。如果tableview不显示在底部,则只显示一些其他控件,因此不需要设置此属性。

“反弹”被设置为“否”,以防止tableview滚动到顶部时响应其自身的向下事件,从而响应整个视图的向下滑动手势。

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

-(BOOL)手势识别器:(UIGestureRecognizer*)手势识别器应该同时识别与手势识别器:(UIGestureRecognizer*)其他手势识别器{

返回是;

}这是允许同时响应多个手势所必需的,否则视图的手势将被tableview的事件覆盖。

00-1010 1.获取scrollViewDidScroll中的tableview偏移量并记录下来。

-(void)scrollviewdscroll :(UIScrollView *)scrollView

{

cgfloatictcurrentposition=scrollview . content offset . y;

self . stop _ y=current position;

}2.滑动手势的处理

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];
}

3、滑动到底部和顶部的事件

滑到底部时需要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实现仿高德首页推拉效果”这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/86828.html

(0)

相关推荐

  • 笔记本键盘失灵怎么办,笔记本电脑键盘失灵怎么办

    技术笔记本键盘失灵怎么办,笔记本电脑键盘失灵怎么办笔记本键盘按键失灵可分为2种情况笔记本键盘失灵怎么办:比较常见的按字母键会显示成数字的情况发生,遇到最多的就是这种情况了;另外一种情况是笔记本键盘出现了问题,具体解决方法

    生活 2021年10月20日
  • python MySQLdb如何配置python链接MYSQL

    技术python MySQLdb如何配置python链接MYSQL这篇文章给大家介绍python MySQLdb如何配置python链接MYSQL,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

    攻略 2021年12月4日
  • 英语的时态,英语七大时态结构,用法

    技术英语的时态,英语七大时态结构,用法时态的用法都是在根据各种时间条件下所发生的行为、动作和状态,依靠着动词的特定的形式来表达英语的时态。不同时态采用的结构是会有相对应的有标志词(时间状语)+相对应的动词的变形。英语时态

    生活 2021年10月28日
  • mysql数据库修复工具(安装mysql时自动创建的数据库)

    技术如何修复MySQL数据库这篇文章主要介绍如何修复MySQL数据库,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! 我整理了7条修复MySQL的方法,当简单的重启对数据库不起作用,或者有表崩溃时。

    攻略 2021年12月22日
  • 基于HAProxy怎么搭建EMQ X集群

    技术基于HAProxy怎么搭建EMQ X集群基于HAProxy怎么搭建EMQ X集群,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。负载均衡器

    攻略 2021年12月10日
  • 临界区 sleep

    技术临界区 sleep 临界区 sleep24.1SleepIn some cases race conditions can be repeated when all but one thread a

    礼包 2021年10月28日