Open ccccwhj-whj opened 3 months ago
可以通过协议中的方法来动态处理
/**
* 询问delegate是否需要使拖拽手势生效
* 若返回NO,则禁用拖拽手势操作,即不能拖拽dismiss
* 默认为YES
*/
- (BOOL)shouldRespondToPanModalGestureRecognizer:(nonnull UIPanGestureRecognizer *)panGestureRecognizer;
/**
* 当pan recognizer状态为begin/changed时,通知delegate回调。
* 当拖动presented View时,该方法会持续的回调
* 默认实现为空
*/
- (void)willRespondToPanModalGestureRecognizer:(nonnull UIPanGestureRecognizer *)panGestureRecognizer;
/**
* 内部处理完成拖动操作后触发此回调,此时view frame可能已经变化。
* Framework has did finish logic for GestureRecognizer delegate. It will call many times when you darg.
*/
- (void)didRespondToPanModalGestureRecognizer:(nonnull UIPanGestureRecognizer *)panGestureRecognizer;
/**
* 内部处理完成拖动操作后触发此回调,此时view frame可能已经变化。
* Framework has did finish logic for GestureRecognizer delegate. It will call many times when you darg.
*/
- (void)didEndRespondToPanModalGestureRecognizer:(nonnull UIPanGestureRecognizer *)panGestureRecognizer;
/**
* 是否优先执行dismiss拖拽手势,当存在panScrollable的情况下,如果此方法返回YES,则
* dismiss手势生效,scrollView本身的滑动则不再生效。也就是说可以拖动Controller view,而scrollView没法拖动了。
*
* 例子:controller view上添加一个TableView,并铺满全屏,然后在controller view 顶部添加一个一定大小的viewA,
* 这个时候会发现viewA有时候无法拖动,可以实现此delegate方法来解决
(BOOL)shouldPrioritizePanModalGestureRecognizer:(UIPanGestureRecognizer *)panGestureRecognizer { CGPoint loc = [panGestureRecognizer locationInView:self.view]; // check whether user pan action in viewA if (CGRectContainsPoint(self.viewA.frame, loc)) { return YES; }
return NO; }
/**
谢谢的提示,实际上我确实已经在这个按照这些代理实现了一般,但是会存在一个比较不好解决的问题: 场景 : 当我滑动过程中(手没有松开)这个时候是没有问题的,我能获取到各种我需要的参数。当我在中途突然松开手指,这个时候就没有那么平滑了,因为值是从当前直接变到结束的值, 但是弹窗又有动画,这会导致视觉上的效果不好(不同步)。 目前我尝试做了一个uiview动画, 看起来倒是挺好的,但是想讨论一下有没有更好的方案,因为据我所知,动画过程中的frame好像没有方法获取
另外咨询一下有没有计划出swift版本?
另外咨询一下有没有计划出swift版本?
没有纯swift版本,但是swift可以引入使用
谢谢的提示,实际上我确实已经在这个按照这些代理实现了一般,但是会存在一个比较不好解决的问题: 场景 : 当我滑动过程中(手没有松开)这个时候是没有问题的,我能获取到各种我需要的参数。当我在中途突然松开手指,这个时候就没有那么平滑了,因为值是从当前直接变到结束的值, 但是弹窗又有动画,这会导致视觉上的效果不好(不同步)。 目前我尝试做了一个uiview动画, 看起来倒是挺好的,但是想讨论一下有没有更好的方案,因为据我所知,动画过程中的frame好像没有方法获取
确实是有这个问题,后面我看看怎么较好的兼容这种情况
我做了几个尝试: 方法一: 使用DisplayLink获取动画过程中panContainerView的frame
方法二: 将指示器的设置为一个view,然后再变化的时候多次刷新frame ,用来改变大小。(这种适合天猫选择商品下单的时候那种第二次网上滑动, 顶部一张图变小的效果) 但是 指示器和panContainerView有个间隔为5的距离
所以我想大佬能不能出个方案类似于指示器那种view,达到可以自定义顶部的效果, 还有就是你那个默认顶部有个21像素,在计算高度时候有点碍事
我做了几个尝试: 方法一: 使用DisplayLink获取动画过程中panContainerView的frame
- (void)startWatchDisplayLink { [self stopWatchDisplayLink]; self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(watchDisplayLink)]; [self.displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; } 可以在手指松开以后接力获取变化的freme,(这种适合抖音评论的那种效果)
方法二: 将指示器的设置为一个view,然后再变化的时候多次刷新frame ,用来改变大小。(这种适合天猫选择商品下单的时候那种第二次网上滑动, 顶部一张图变小的效果) 但是 指示器和panContainerView有个间隔为5的距离
所以我想大佬能不能出个方案类似于指示器那种view,达到可以自定义顶部的效果, 还有就是你那个默认顶部有个21像素,在计算高度时候有点碍事
”默认顶部有个21像素“可以配置为0的
目前没时间开发,你可以fock 提pr
好的。等我在多看一下你的代码,争取做到丝滑。 现在做的不是很丝滑
场景: 还原类似于抖音评论弹起时,背景视屏等比缩小放大,需要实时获取到view的y高度。如果直接在完成的回掉中修改,效果不好
或者还有其他方案?