我查看从一个位置到另一个位置的视图。我可以在移动时获得点的位置,但是我想在平移未移动或在某一点空闲时执行某些操作。我没有看到任何状态显示平移手势是空闲的。我遇到的触摸事件是UITouchPhaseStationary nut我不知道如何实现它。
答案 0 :(得分:2)
没有状态,this post中解释的UITouchPhaseStationary用于多点触控,并让您知道屏幕上是否有另一个静止的手指,而另一个手指正在移动。
但是,你可以自己实现这样的东西。只需将时间间隔设置为超时的定时器,然后应将触摸视为静止,并在手势位置发生变化时运行。当手势结束时以及手势改变以重置计时器时,您将希望使计时器无效。这是一个例子。
- (void)gestureDidFire:(UIPanGestureRecognizer *)gesture
{
static NSTimer *timer = nil;
if (gesture.state == UIGestureRecognizerStateChanged) {
if (timer.isValid) {
[timer invalidate];
}
timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerDidFire:) userInfo:nil repeats:NO];
}else if (gesture.state == UIGestureRecognizerStateEnded) {
if (timer.isValid) {
[timer invalidate];
}
}
}
- (void)timerDidFire:(NSTimer *)timer
{
NSLog(@"Stationary");
}
答案 1 :(得分:0)
您可以实施touchesEnded:withEvent:
以确定触摸何时结束。在panGesture方法上设置一个标志,然后检查该值
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
if (self.hasMoved) {
// Do something
self.hasMoved = NO;
}
}
答案 2 :(得分:0)
试试这个
- (void)panRecognized:(UIPanGestureRecognizer *)rec
{
CGPoint vel = [rec velocityInView:self.view];
if (vel.x == 0 && vel.y == 0)
{
// Not moved
}
else
// moved
}