看起来这应该很简单,但显然不是这样。
我正在使用Storyboards,我的第一个视图控制器定义为LogbookFirstViewController
。
此控制器的内容位于UIControl
内。这样我可以检测到水龙头。
但是,我看不到确定用户何时开始在屏幕上滑动的简单方法。我想做的就是触摸x坐标。基本上跟踪它。
我在UIPanGestureRecognizer
内放了LogbookFirstViewController
,并附上了它的插座:
在.h
@property (assign) IBOutlet UIGestureRecognizer *gestureRecognizer;
当然,我然后合成它并设置委托:
在.m
[gestureRecognizer setDelegate:self];
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touchLoc = [touches anyObject];
CGPoint beginCenter = self.view.center;
CGPoint touchPoint = [touchLoc locationInView:self.view];
deltaX = touchPoint.x - beginCenter.x;
deltaY = touchPoint.y - beginCenter.y;
NSLog(@"X = %f & Y = %f", deltaX, deltaY);
}
- (void) touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event {
UITouch * touch = [touches anyObject];
CGPoint touchPoint = [touch locationInView:self.view];
// Set the correct center when touched
touchPoint.x -= deltaX;
touchPoint.y -= deltaY;
self.view.center = touchPoint;
}
然而,这没有任何作用。它甚至没有检测到-(void)touchesBegan
我错过了什么?谢谢你提前。
答案 0 :(得分:2)
这些方法不是委托方法,它们仅用于子类化UIGestureRecognizer
。
通常,您实例化手势识别器并指定一个选择器(方法),以便在识别该手势时调用,然后将其分配给视图,例如:
UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)];
[self.view addGestureRecognizer:pan]
然后在您的pan
方法中,您可以查询来自手势的信息:
- (void)pan:(UIPanGestureRecognizer *)gesture
{
// get information from the gesture object
}
我从未使用StoryBoard完成它,但我想如果您的视图控制器中已有属性,则可以调用addTarget:action:
并将其附加到视图控制器viewDidLoad
方法中的视图。