私の連絡先情報
郵便メール:
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 = NO になります。
self.tableView は、このスライド中はスクロールしません。self.tableView.panGestureRecognizer.enabled = NO の後に self.tableView.panGestureRecognizer.enabled = YES が設定されていても、スクロールしません。
これは、**スライド ジェスチャに応答して、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