[英]iphone/ipad - parent UIView is blocking touches from getting to subviews - why?
[英]iPhone - UIView inside UIScroller… view not passing touches to parent
我在UIScroller中有一个UIView(叫它myView)。
myView具有可以拖动的元素。
当触摸这些元素之一时,滚动条将被锁定,以防止整个滚动。 元素具有ExclusiveTouch = YES。 我只需要触摸myView就可以滚动整个内容。
我曾使用touchesBegan,touchesMoved等进行此操作,但是我正在将此类转换为手势。 新类具有两个手势:UIPanGestureRecognizer和UITapGestureRecognizer。 就像是:
UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc]
initWithTarget:self action:@selector(drag:)];
[panGesture setMaximumNumberOfTouches:1];
[panGesture setDelegate:self];
[myView addGestureRecognizer:panGesture];
[panGesture release];
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc]
initWithTarget:self
action:@selector(tapAdd:)];
[singleTap setDelegate:self];
[singleTap setNumberOfTapsRequired:1];
[myView addGestureRecognizer:singleTap];
[singleTap release];
当此类使用旧方法(touchesBegan等)时,我只是使用类似
[self.nextResponder touchesBegan: touches withEvent:event];
但是我该如何使用手势呢? 我的意思是,在我的情况下,UIPanGestureRecognizer将运行一个名为drag的方法,并且该方法接收到一个手势...我如何将触摸转发给它的滚动父,以便整个滚动?
谢谢
您可能会设置一个协议来代表您的视图。
在标题中,设置
@protocol MyViewDelegate
- (void)drag;
@end
@interface ....... {
id <MyViewDelegate> delegate;
}
@property (nonatomic, assign) id delegate;
@end
您必须在实现文件中合成delegate
。 在滚动器类中,您将必须使用协议
@interface Scroller ....... <MyViewDelegate> {
在该实现文件中,确保放入myView.delegate = self;
初始化时添加- (void)drag {
然后在其中执行所需操作。 如果您需要更多信息,则当然可以将协议中的方法设置为- (void)dragWithEvent:(UIEvent *)event
东西。
然后,在myView中调用drag:
时,可以通过调用[self.delegate dragWithEvent:event];
将其转发到协议方法[self.delegate dragWithEvent:event];
。
我知道,这可以使您的滚动条滚动一些,但是它会根据您的需要转发消息。
也可以将手势添加到滚动条而不是myView,然后转发touchesBegan
方法中的所有触摸并让滚动条直接处理
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.