我在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的方法:此方法接收一个手势...如何将触摸转发到其滚动父级,所以整个事情滚动?
感谢
答案 0 :(得分:1)
你可以设置一个协议来代表你的观点。
在标题中,设置
@protocol MyViewDelegate
- (void)drag;
@end
@interface ....... {
id <MyViewDelegate> delegate;
}
@property (nonatomic, assign) id delegate;
@end
您必须在实现文件中合成delegate
。
在scroller类中,您必须使用协议
@interface Scroller ....... <MyViewDelegate> {
在该实施文件中,请确保在初始化时添加myView.delegate = self;
并添加- (void)drag {
并在其中执行您想要的操作。如果您需要更多信息,您当然可以将协议中的方法指定为- (void)dragWithEvent:(UIEvent *)event
或类似的方法。
然后,当您在myView中调用drag:
时,可以通过调用[self.delegate dragWithEvent:event];
将其转发给协议方法。
我意识到让滚动条滚动有点广泛,但它会像你想要的那样转发信息。
也可以将手势添加到滚动条而不是myView,然后转发touchesBegan
方法中的所有触摸并让滚动条直接处理