如何给scrollview上添加的子控件UIView上添加手势

如何给scrollview上添加的子控件UIView上添加手势,第1张

如果不做特殊处理,在scrollView上添加子控件UIView添加手势,如果是拖拽,轻扫手势,会发现,不起作用个,而是scrollView处理了事件,会产生scrollerview拖动事件,这不是我们需要的效果,如何处理呢,自定义一个继承至uiscrollview的控件,

设置两个属性,self.delaysContentTouches = NO

self.canCancelContentTouches = YES

并且:

- (BOOL)touchesShouldCancelInContentView:(UIView *)view

{

return NO

}

在scrollview上加一个tablevew,scrollview水平滑动,tableview支持滑动删除,此时两者滑动冲突

直接贴代码吧

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch

{

UIView *view = touch.view

if ([view isKindOfClass:[UITableView class]] || [@"UITableViewCellContentView" isEqualToString:[[view class] description]] )

{

return NO

}

return YES

}

顺便提及一下:

在UIView上面加scrollView,scroll里面加customView (UIview),UIView上面加拖拽手势,使customView能够拖拽移动,解决scrollView和UIPanGestureRecognizer的冲突

viewController对应的view加手势UIPanGestureRecognizer

- (IBAction)touchDragGesture:(UIPanGestureRecognizer *)sender {

CGPoint point = [sender locationInView:self.scrollView]

if (sender.state == UIGestureRecognizerStateBegan) {

for (UIView *subView in [self.scrollView subviews]) {

if ([subView isKindOfClass:[customView class]]) {

//do something

}

}

}else if (sender.state == UIGestureRecognizerStateEnded) {

//do something

}else{

//do something

}

}

在scrollview里面

-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event

{

UIView *result = [super hitTest:point withEvent:event]

NSArray *subViews = self.subviews

for (UIView *subView in subViews) {

if ([subView isKindOfClass:[customView class]]) {

customView *table = (customView *)subView

CGPoint buttonPoint = [table convertPoint:point fromView:self]

if ([table pointInside:buttonPoint withEvent:event])

{

return [self superview]

}

}

}

return result

}

ok,完工!


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11623394.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存