一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - IOS - iOS仿高德首頁推拉效果實例代碼

iOS仿高德首頁推拉效果實例代碼

2021-12-29 14:49鄂北 IOS

這篇文章主要給大家介紹了關于iOS仿高德首頁推拉效果的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

iOS仿高德首頁推拉效果實例代碼

上面是實現的效果,滑動的視圖是新建的一個UIView子類

1、滑動view的調用

?
1
2
3
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相關配置

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

tableView必須加上上面這兩個屬性

userInteractionEnabled屬性是用來阻止當視圖在底部時禁止tableview上的手勢的,不加這個屬性時會導致視圖在底部時會響應tableview向上滾動的事件,從而導致視圖無法整體向上滑動。當視圖滑到頂部時又需要把userInteractionEnabled設為YES,否則tableview無法向上滾動。如果在底部時tableview并沒有展示出來,展示的只是一些其他的控件就可以不需要設置這個屬性
bounces設為NO是為了阻止tableview滾動到頂部時還能響應自己的向下拉的事件,從而去響應整個視圖的向下滑到手勢。

3、設置允許同時響應多個手勢

?
1
2
3
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    return YES;
}

這個允許同時響應多個手勢是必須的,否則視圖的手勢會被tableview的事件覆蓋掉。

4、滑動相關邏輯處理

1、在scrollViewDidScroll中獲取tableview偏移量,記錄下來

?
1
2
3
4
5
-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    CGFloat currentPostion = scrollView.contentOffset.y;
    self.stop_y = currentPostion;
}

2、滑動手勢的處理

self.top是視圖的self.frame.origin.y,我這邊是寫在了分類中。

self.bottomH在視圖初始時將self.top賦值給了self.bottomH

在視圖滑動過程中對速度和距離做了判斷,根據速度和距離將視圖滑動到底部和頂部

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
- (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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
- (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全部注釋掉就可以了。

?
1
2
3
4
5
6
7
8
9
-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    CGFloat currentPostion = scrollView.contentOffset.y;
    self.stop_y = currentPostion;
    
    if (self.top>self.topH) {
        [scrollView setContentOffset:CGPointMake(0, 0)];
    }
}

至此整個滑動效果就實現了,有興趣的小伙伴可以下載demo看看

總結

到此這篇關于iOS仿高德首頁推拉效果的文章就介紹到這了,更多相關iOS仿高德首頁推拉內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://www.jianshu.com/p/5c0c1059923f

延伸 · 閱讀

精彩推薦
  • IOSiOS中UILabel實現長按復制功能實例代碼

    iOS中UILabel實現長按復制功能實例代碼

    在iOS開發過程中,有時候會用到UILabel展示的內容,那么就設計到點擊UILabel復制它上面展示的內容的功能,也就是Label長按復制功能,下面這篇文章主要給大...

    devilx12792021-04-02
  • IOSiOS中MD5加密算法的介紹和使用

    iOS中MD5加密算法的介紹和使用

    MD5加密是最常用的加密方法之一,是從一段字符串中通過相應特征生成一段32位的數字字母混合碼。對輸入信息生成唯一的128位散列值(32個字符)。這篇文...

    LYSNote5432021-02-04
  • IOS詳解iOS中多個網絡請求的同步問題總結

    詳解iOS中多個網絡請求的同步問題總結

    這篇文章主要介紹了詳解iOS中多個網絡請求的同步問題總結,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧...

    liang199111312021-03-15
  • IOSiOS實現控制屏幕常亮不變暗的方法示例

    iOS實現控制屏幕常亮不變暗的方法示例

    最近在工作中遇到了要將iOS屏幕保持常亮的需求,所以下面這篇文章主要給大家介紹了關于利用iOS如何實現控制屏幕常亮不變暗的方法,文中給出了詳細的...

    隨風13332021-04-02
  • IOSiOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和Masonry簡單使用)

    iOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和

    這篇文章主要介紹了iOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和Masonry簡單使用)的相關資料,需要的朋友可以參考下...

    CodingFire13652021-02-26
  • IOSiOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果

    iOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果

    這篇文章主要介紹了iOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果的相關資料,需要的朋友可以參考下...

    jiangamh8882021-01-11
  • IOSiOS開發之視圖切換

    iOS開發之視圖切換

    在iOS開發中視圖的切換是很頻繁的,獨立的視圖應用在實際開發過程中并不常見,除非你的應用足夠簡單。在iOS開發中常用的視圖切換有三種,今天我們將...

    執著丶執念5282021-01-16
  • IOSiOS開發技巧之狀態欄字體顏色的設置方法

    iOS開發技巧之狀態欄字體顏色的設置方法

    有時候我們需要根據不同的背景修改狀態欄字體的顏色,下面這篇文章主要給大家介紹了關于iOS開發技巧之狀態欄字體顏色的設置方法,文中通過示例代碼...

    夢想家-mxj8922021-05-10
主站蜘蛛池模板: 国产精品区一区二区免费 | 公园吃女人奶野战视频 | 精品一卡2卡3卡4卡5卡亚洲 | 国产成年人视频 | 国产一区二区三区高清视频 | 91色+91sesex| 国产精品视频色拍拍 | 亚洲国产午夜看片 | 2015台湾永久免费平台 | 丝瓜视频黄瓜视频 | 4虎影视国产在线观看精品 4s4s4s4s色大众影视 | 12一14性水蜜桃 | 久久黄色免费 | 日本三级s级在线播放 | 亚洲高清国产拍精品动图 | 成人小视频在线免费观看 | 精品久久免费观看 | 秘书喂奶好爽一边 | 成年女人毛片免费观看97 | 国产成人高清精品免费观看 | 日本色吧 | 经典欧美gifxxoo动态图暗网 | 日本zzzzwww大片免费 | 99re精品在线 | 国产一级在线免费观看 | 美国复古性经典xxxxx | 九九大香尹人视频免费 | 久久久久嫩草影院精品 | 亚洲第五色综合网啪啪 | 亚洲一二三区视频 | 爱欲荡漾在线观看 | 亚洲精品一区在线观看 | 日本捏胸吃奶视频免费 | 成年极品漫画在线观看 | 俄罗斯烧性春三级k8播放 | 贰佰麻豆剧果冻传媒一二三区 | 日本男女视频 | 9色视频在线观看 | 99成人国产精品视频 | 香蕉大久久 | 国产精品亚洲综合久久 |