내 연락처 정보
우편메소피아@프로톤메일.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
때때로 우리는 다음과 같은 대화형 시나리오를 접하게 됩니다. UITableView가 있습니다.
팝업 창에 배치합니다. 이 팝업 창은 슬라이딩(손으로 스와이프)하여 표시하고 사라질 수 있습니다. 그러면 이 UITableView가 팝업 창에 배치되고 스크롤하여 다음과 같은 일부 콘텐츠를 표시할 수 있습니다. 제품 정보 및 댓글(Douyin의 댓글 팝업창과 유사), 아래로 슬라이드할 때 tableView가 위로 슬라이드된 경우 슬라이딩 동작에 반응하여 팝업창을 계속 아래로 슬라이드할 수 있습니다.
먼저 팝업 보기에 tableView가 있습니다. 이 tableView는 정상적으로 슬라이드할 수 있습니다. 그런 다음 팝업 보기에 슬라이딩 동작을 추가하여 팝업 프레임을 수정합니다. 창문.따라서 이 팝업 보기는 제스처에 응답하는 프록시입니다.
광장과
팝업 창에 슬라이딩 동작을 추가하고 응답 방법은 handlerPan입니다.
테스트를 통해 우리는 다음을 발견했습니다.tableView에서 손으로 스크롤할 때마다 실행할 때마다
tableView의 프록시 메소드인 scrollViewDidScroll 이전에 handlerPan 메소드가 실행됩니다.
또한 스와이프 중에(손이 화면을 떠나지 않으면 동일한 스와이프로 계산됩니다.)
응답 메소드인 handlerPan에 설정된 경우
self.tableView.panGestureRecognizer.enabled = NO;
self.tableView는 이 슬라이드 중에 스크롤되지 않습니다. self.tableView.panGestureRecognizer.enabled = YES가 self.tableView.panGestureRecognizer.enabled = NO 이후에 설정되어 있어도 스크롤되지 않습니다.
이는 **슬라이딩 제스처에 대한 응답으로 self.tableView.panGestureRecognizer.enabled = NO가 가장 높은 우선순위를 가짐을 보여줍니다.
- (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