如何使用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)

相关推荐

  • css3翻转效果(在css中可以实现旋转效果的属性)

    技术css3如何实现元素左右翻转这篇文章主要介绍了css3如何实现元素左右翻转,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

    攻略 2021年12月16日
  • 北京名胜古迹介绍,北京现存的文物古迹有哪些

    技术北京名胜古迹介绍,北京现存的文物古迹有哪些很高兴回答你的问题!以下是我罗列的21处北京现存的文物古迹景点北京名胜古迹介绍,希望能对你有所帮助!1、北京故宫,国家5A级景区、世界文化遗产、全国重点文物保护单位。世界上现

    生活 2021年10月28日
  • mysql连接慢的示例分析

    技术mysql连接慢的示例分析小编给大家分享一下mysql连接慢的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一个同事今天反应公司的

    攻略 2021年11月1日
  • 复杂的英语,高中英语复杂句子成分分析例句

    技术复杂的英语,高中英语复杂句子成分分析例句并列句中两个分句又内含从句的话,那就成为一种更加复杂的并列复合句复杂的英语。例句:While the men worked to stregthen the dam ,the

    生活 2021年10月20日
  • SQL查询中什么时候需要使用表别名

    技术SQL查询中什么时候需要使用表别名这篇文章主要介绍SQL查询中什么时候需要使用表别名,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!SQL查询中什么时候需要使用表别名?1、 表名很长时selec

    攻略 2021年12月4日
  • JavaScript中ECMAScript是什么

    技术JavaScript中ECMAScript是什么这篇文章主要介绍了JavaScript中ECMAScript是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起

    攻略 2021年10月30日