gpt4 book ai didi

ios - 在 UICollectionViewCell 上实现在 View 上滑动而不在滚动期间滑动

转载 作者:行者123 更新时间:2023-12-01 16:43:25 25 4
gpt4 key购买 nike

我正在使用 UIPanGestureRecognizer平移我的contentViewUICollectionViewCell .我正在从两侧执行滑动手势。我正在使用平底锅,因为我希望能够将 View 弹回(动画)回其原点。
UICollectionView是一个包含行的部分,其中每一行都是一个项目单元格(想想表)。

问题是当我向下滚动我的 UICollectionView 时,我不经意间导致我的细胞移动,因为发生的拖动翻译是如此之少。我试过实现 UIScrollViewDelegate尝试防止单元格在滚动过程中意外移动的方法,但即使“触摸单元格”边缘情况仍会触发,导致单元格轻微平移。感觉不对,因为当您滚动并且拇指触摸单元格时,您会看到许多单元格在周围平移。

关于如何在滚动时防止这种敏感性有什么好主意吗?例如,默认的 Apple Mail.app 在滚动时似乎没有这个问题;似乎有某种内在的抵抗力。

一些想法:

  • 对 x 轴上的某个开始 k 宽度应用一些阻力函数。尝试对速度也这样做
  • 如果速度不足以看到阻力“驼峰”。
  • 尝试使用 UIScrollView而不是平移手势识别器,但是我还需要以某种方式支持在另一侧滑动。
  • 我应该考虑为此使用 UIKit Dynamics 吗?

  • 任何想法,将不胜感激。

    最佳答案

    尝试设置 UICollectionView您的 UICollectionViewCell 的平移手势必须失败是有效的。使用这种方法:

    // create a relationship with another gesture recognizer that will prevent this gesture's actions from being called until otherGestureRecognizer transitions to UIGestureRecognizerStateFailed
    // if otherGestureRecognizer transitions to UIGestureRecognizerStateRecognized or UIGestureRecognizerStateBegan then this recognizer will instead transition to UIGestureRecognizerStateFailed
    // example usage: a single tap may require a double tap to fail
    - (void)requireGestureRecognizerToFail:(UIGestureRecognizer *)otherGestureRecognizer;

    也许通过在创建时传递的单元格上添加一个属性?
    @interface YourCollectionViewCell : UICollectionViewCell
    @property (weak, nonatomic) UIGestureRecognizer *blockingGestureRecognizer;

    @property (strong, nonatomic) UIGestureRecognizer *internalSwipeGestureRecognizer;
    @end

    @implementation YourCollectionViewCell
    - (void)setBlockingGestureRecognizer:(UIGestureRecognizer *)blockingGestureRecognizer {
    _blockingGestureRecognizer = blockingGestureRecognizer;
    [self.internalSwipeGestureRecognizer requireGestureRecognizerToFail:blockingGestureRecognizer];
    }
    @end

    @interface YourViewController : UIViewController

    #pragma mark - UICollectionViewDataSource

    - (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:YourCollectionViewCell.identifier forIndexPath:indexPath];

    cell.blockingGestureRecognizer = collectionView.panGestureRecognizer;

    return cell;
    }
    @end

    完全警告,我没有编译或测试过这种方法,但我认为它应该可以工作。 :)

    关于ios - 在 UICollectionViewCell 上实现在 View 上滑动而不在滚动期间滑动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22214893/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com