简单的方法来获得X轴上的触摸点,Cocoa Touch

时间:2013-01-23 01:03:48

标签: objective-c cocoa-touch touch uistoryboard

看起来这应该很简单,但显然不是这样。

我正在使用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

我错过了什么?谢谢你提前。

1 个答案:

答案 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方法中的视图。