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

相关推荐

  • 20202303 实验八《数据结构与面向对象程序设计》实验报告

    技术20202303 实验八《数据结构与面向对象程序设计》实验报告 20202303 实验八《数据结构与面向对象程序设计》实验报告# 20202303 2021-2022-1 《数据结构与面向对象程序设

    礼包 2021年11月27日
  • web前端的proxy有什么作用

    技术web前端的proxy有什么作用这篇文章主要介绍“web前端的proxy有什么作用”,在日常操作中,相信很多人在web前端的proxy有什么作用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家

    攻略 2021年11月12日
  • 伤害英语,几个关于伤害的英语词汇的区别

    技术伤害英语,几个关于伤害的英语词汇的区别damage: 指部分性的损坏,意味着损坏后价值降低,有损于功能、吸引力及效率降低伤害英语。 destroy 指完全彻底的破坏,常有不能或很难修复的意思。
    harm: 较为通俗

    生活 2021年10月24日
  • 总结软件缺陷的定义、分类、检测和修复

    技术总结软件缺陷的定义、分类、检测和修复这篇文章主要介绍“总结软件缺陷的定义、分类、检测和修复”,在日常操作中,相信很多人在总结软件缺陷的定义、分类、检测和修复问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法

    攻略 2021年10月20日
  • 如何用3个步骤实现响应式Web设计

    技术如何用3个步骤实现响应式Web设计本篇文章给大家分享的是有关如何用3个步骤实现响应式Web设计,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。写在前面的话

    攻略 2021年11月17日
  • 二寸照片像素,2寸的图片要用多少像素来表示?

    技术二寸照片像素,2寸的图片要用多少像素来表示?相片常用尺寸知识 要达到满意的数码扩印效果二寸照片像素:
    照片规格(英寸) (厘米) (像素) 数码相机类型 1寸 2.5*3.5cm 413*295
    身份证大头照

    生活 2021年10月29日