Teknologian jakaminen

iOS UITableView sisältää liukueleitä ja ylätason näkymä lisää liukueleiden ristiriitojen vastausmekanismien tutkimisen

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Kohtauksia

Joskus kohtaamme tällaisen interaktiivisen skenaarion: meillä on UITableView
Aseta se ponnahdusikkunaan Tämä ponnahdusikkuna voidaan näyttää ja poistaa liu'uttamalla (pyyhkäisemällä kädelläsi) Sitten tämä UITableView sijoitetaan ponnahdusikkunaan ja sitä voidaan vierittää näyttämään sisältöä, kuten tuotetiedot ja kommentit (samanlainen kuin Douyinin kommenttiponnahdusikkuna), ja alaspäin liukuessa, jos tableView on liukunut ylös, voit vastata liukuvaan eleeseen ja jatkaa ponnahdusikkunan liukumista alaspäin.

Ideoita

Ensin ponnahdusikkunassa on tableView. Tämä tableView voi liukua normaalisti. Sitten lisäämme ponnahdusnäkymään liukuvan eleen. Muokkaamme ponnahdusikkunan kehystä ikkuna.Siksi tämä ponnahdusikkuna on välityspalvelin, joka vastaa eleisiin
neliö ja sisään

  • (BOOL)eleRecognizer:(UIGestureRecognizer *)eleRecognizerin pitäisiTunnistaaSamanaikaisestiGestureRecognizerin kanssa:(UIGestureRecognizer *)muuEleRecognizer
    Välityspalvelimessa, jos gestureRecognizer on oma liukuva ele ja muuGestureRecognizer on tableView'n liukuva ele, sen on tuettava samanaikaista vastausta, eli palautettava KYLLÄ Samaan aikaan meillä on oltava idea, eli jos meidän
    Kun tableView vierii ylös, sinun on asetettava tablView:n vieritysele niin, että se ei tue vastausta. Muussa tapauksessa tableView vierittää ylöspäin aiheuttaa ponnahdusikkunoita ja tableView Samanaikaisen vierityksen tapauksessa tätä emme halua, joten kun tablView vierii ylös, meidän on asetettava tableView'n pangesture.enabled = NO.

Kaksoispyyhkäisyeleiden vieritysvastausmekanismi

Lisäämme ponnahdusikkunaan liukuvan eleen ja vastaustapa on handlePan:
Testaamalla huomasimme senKun kätemme rullaa pöydälläView, joka kerta kun suoritamme
Ennen tableView-välityspalvelinmenetelmää scrollViewDidScroll suoritetaan handlePan-menetelmä.

Lisää kuvan kuvaus

Lisäksi pyyhkäisyn aikana (sama pyyhkäisy lasketaan, jos käsi ei poistu näytöltä),
Jos se on asetettu vastausmenetelmässä handlePan
self.tableView.panGestureRecognizer.enabled = EI aiheuttaa
self.tableView ei rullaa tämän dian aikana, vaikka self.tableView.panGestureRecognizer.enabled = YES on asetettu self.tableView.panGestureRecognizer.enabled = EI, se ei vieritä.

Tämä osoittaa, että **Vastauksena liukuvaan eleeseen self.tableView.panGestureRecognizer.enabled = EI on korkein prioriteetti

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    NSLog(@"哈哈哈哈哈这里是执行scrollViewDidScroll self.panNum是%ld", self.panNum);
}

  • 1
  • 2
  • 3
  • 4
  • 5
- (void)handlePan:(UIPanGestureRecognizer *)pan
{
   self.tableView.panGestureRecognizer.enabled = YES;

   NSLog(@"哈哈哈哈哈这是第%ld次响应滑动手势handlePan 方法", self.panNum);
   if (self.panNum % 2 == 0) {
       self.tableView.panGestureRecognizer.enabled = NO;
   } else {
       self.tableView.panGestureRecognizer.enabled = YES;
   }
   self.tableView.panGestureRecognizer.enabled = YES;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

Lisää kuvan kuvaus

Yllä olevan testin täydellinen koodi

//
//  LBPangestureController.m
//  TEXT
//
//  Created by mac on 2024/7/7.
//  Copyright © 2024 刘博. All rights reserved.
//

#import "LBPangestureController.h"

@interface LBPangestureController () <UITableViewDelegate, UITableViewDataSource, UIGestureRecognizerDelegate>

@property (nonatomic, strong) UITableView *tableView;

@property (nonatomic, strong) UIPanGestureRecognizer *pangesture;

@property (nonatomic, assign) NSInteger panNum;

@end

@implementation LBPangestureController

- (void)viewDidLoad {
    [super viewDidLoad];
    [self.view addSubview:self.tableView];
    [self.view addGestureRecognizer:self.pangesture];
    // Do any additional setup after loading the view.
}


- (void)handlePan:(UIPanGestureRecognizer *)pan
{
    self.tableView.panGestureRecognizer.enabled = YES;

    NSLog(@"哈哈哈哈哈这是第%ld次响应滑动手势handlePan 方法", self.panNum);
    if (self.panNum % 2 == 0) {
        self.tableView.panGestureRecognizer.enabled = NO;
    } else {
        self.tableView.panGestureRecognizer.enabled = YES;
    }
    self.tableView.panGestureRecognizer.enabled = YES;
}

#pragma mark  - UITableViewDelegate, UITableViewDataSource

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([UITableViewCell class])];
    cell.textLabel.text = [NSString stringWithFormat:@"%ld", indexPath.row];
    return cell;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 100;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 60;
}

#pragma mark - uiscrollViewdelegate

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    NSLog(@"哈哈哈哈哈这里是执行scrollViewDidScroll self.panNum是%ld", self.panNum);
}

#pragma mark - gesturedelegate

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
    if (gestureRecognizer == self.pangesture) {
        self.panNum ++;
    }
    return YES;
}

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    if (gestureRecognizer == self.pangesture && otherGestureRecognizer == self.tableView.panGestureRecognizer) {
        return YES;
    }
    return NO;
}

#pragma mark - lazy load

- (UITableView *)tableView
{
    if (!_tableView) {
        _tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 100, 300, 400) style:UITableViewStylePlain];
        [_tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:NSStringFromClass([UITableViewCell class])];
        _tableView.delegate = self;
        _tableView.dataSource = self;
        _tableView.backgroundColor = [UIColor cyanColor];
    }
    return _tableView;
}

- (UIPanGestureRecognizer *)pangesture
{
    if (!_pangesture) {
        _pangesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
        _pangesture.delegate = self;
    }
    return _pangesture;
}

/*
#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.
}
*/

@end

  • 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
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122