τα στοιχεία επικοινωνίας μου
Ταχυδρομείο[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Μερικές φορές συναντάμε ένα τέτοιο διαδραστικό σενάριο: έχουμε ένα UITableView
Τοποθετήστε το σε ένα αναδυόμενο παράθυρο Αυτό το αναδυόμενο παράθυρο μπορεί να εμφανιστεί και να εξαφανιστεί σύροντας το χέρι σας, στη συνέχεια, αυτό το UITableView τοποθετείται στο αναδυόμενο παράθυρο και μπορεί να γίνει κύλιση για να εμφανιστεί κάποιο περιεχόμενο, π.χ πληροφορίες προϊόντος και σχόλια (παρόμοια με το αναδυόμενο παράθυρο σχολίων του Douyin) και όταν σύρετε προς τα κάτω, εάν το tableView έχει ολισθήσει στην κορυφή, μπορείτε να απαντήσετε στη συρόμενη κίνηση και να συνεχίσετε να σύρετε το αναδυόμενο παράθυρο προς τα κάτω.
Πρώτα, έχουμε ένα tableView στην αναδυόμενη προβολή Αυτό το tableView μπορεί να ολισθαίνει κανονικά. Στη συνέχεια, προσθέτουμε μια συρόμενη κίνηση στην αναδυόμενη προβολή παράθυρο.Επομένως, αυτή η αναδυόμενη προβολή είναι ένας διακομιστής μεσολάβησης που ανταποκρίνεται σε χειρονομίες
πλατεία και μέσα
Προσθέτουμε μια συρόμενη κίνηση στο αναδυόμενο παράθυρο και η μέθοδος απόκρισης είναι handlePan:
Μέσα από δοκιμές το βρήκαμεΌταν το χέρι μας κάνει κύλιση στο tableView, κάθε φορά που εκτελούμε
Πριν από τη μέθοδο μεσολάβησης του tableView scrollViewDidScroll, θα εκτελεστεί η μέθοδος handlePan.
Επιπλέον, κατά τη διάρκεια ενός σάρωσης (το ίδιο σάρωση μετράται αν το χέρι δεν φεύγει από την οθόνη),
Εάν έχει οριστεί στη μέθοδο απόκρισης handlePan
self.tableView.panGestureRecognizer.enabled = ΟΧΙ θα προκαλέσει
Το self.tableView δεν θα πραγματοποιήσει κύλιση κατά τη διάρκεια αυτής της διαφάνειας, ακόμα κι αν το self.tableView.panGestureRecognizer.enabled = YES έχει οριστεί μετά το self.tableView.panGestureRecognizer.enabled = ΟΧΙ, δεν θα πραγματοποιήσει κύλιση.
Αυτό δείχνει ότι **Σε απόκριση σε μια συρόμενη χειρονομία, η self.tableView.panGestureRecognizer.enabled = ΟΧΙ έχει την υψηλότερη προτεραιότητα
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
NSLog(@"哈哈哈哈哈这里是执行scrollViewDidScroll self.panNum是%ld", self.panNum);
}
- (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;
}
Ο πλήρης κωδικός για το παραπάνω τεστ
//
// 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