Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iPhone-UIScroller内部的UIView。。。视图不向父级传递接触_Iphone - Fatal编程技术网

iPhone-UIScroller内部的UIView。。。视图不向父级传递接触

iPhone-UIScroller内部的UIView。。。视图不向父级传递接触,iphone,Iphone,我在UIScroller中有一个UIView(我们称之为myView) myView具有可以在其上拖动的元素 当触摸其中一个元素时,滚动条被锁定,以防止整个内容滚动。元素具有排他性touch=YES。我需要整个东西滚动时,只有我的看法是触摸 我用touchesbeated、touchesMoved等来学习,但我正在将这个课程转换为手势。新类附带了两个手势:UIPanGestureRecognizer和UIApgestureRecognizer。比如: UIPanGestureRecognize

我在UIScroller中有一个UIView(我们称之为myView)

myView具有可以在其上拖动的元素

当触摸其中一个元素时,滚动条被锁定,以防止整个内容滚动。元素具有排他性touch=YES。我需要整个东西滚动时,只有我的看法是触摸

我用touchesbeated、touchesMoved等来学习,但我正在将这个课程转换为手势。新类附带了两个手势:UIPanGestureRecognizer和UIApgestureRecognizer。比如:

 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];
当这个类使用旧的方法(touchesbreated等)时,我只是简单地使用

[self.nextResponder touchesBegan: touches withEvent:event]; 
但我该如何使用手势呢?我的意思是,在我的例子中,UIPangestureRecognitor将运行一个名为drag的方法:这个方法接收一个手势。。。如何将触摸转发给滚动条父项,使整个内容滚动


谢谢

您可以设置一个协议来代表您的视图

在标题中,设置

@protocol MyViewDelegate
- (void)drag;
@end

@interface ....... {
    id <MyViewDelegate> delegate;
}
@property (nonatomic, assign) id delegate;
@end
在该实现文件中,确保将
myView.delegate=self初始化时,添加
-(void)拖动{
并在其中执行您想要的操作。如果您需要更多信息,当然可以将协议中的方法指定为类似
-(void)dragWithEvent:(UIEvent*)event
或类似的方法

然后,在myView中调用
拖动:
时,可以通过调用
[self.delegate dragWithEvent:event];
将其转发到协议方法

我意识到这是一个有点广泛,让您的滚动条滚动,但它会转发你想要的消息

您还可以将手势添加到滚动条而不是myView,然后在
touchsbegind
方法中转发所有触摸,让滚动条直接处理

@interface Scroller ....... <MyViewDelegate> {