gpt4 book ai didi

iphone - 如何使用 UIPanGestureRecognizer 捕获正在平移的方向?

转载 作者:行者123 更新时间:2023-12-03 18:09:57 24 4
gpt4 key购买 nike

好吧,我一直在寻找几乎所有捕捉多点触控手势的选项,最后我又回到了 UIPanGestureRecognizer。

我想要的功能真的很简单。我设置了一个两指平移手势,并且我希望能够根据我移动的像素数来随机浏览一些图像。我已经完成了所有工作,但我希望能够捕获平移手势是否反转。

是否有一种内置方式我只是看不到检测到手势的返回?我是否必须存储原始起点,然后跟踪终点,然后查看它们之后移动的位置,并确定其是否小于初始终点,然后相应地反转?我可以看到它的工作原理,但我希望有一个更优雅的解决方案!!

谢谢

编辑:

这是识别器设置为触发的方法。它有点像黑客,但它有效:

-(void) throttle:(UIGestureRecognizer *) recognize{

throttleCounter ++;

if(throttleCounter == 6){
throttleCounter = 0;
[self nextPic:nil];
}

UIPanGestureRecognizer *panGesture = (UIPanGestureRecognizer *) recognize;
UIView *view = recognize.view;
if(panGesture.state == UIGestureRecognizerStateBegan){
CGPoint translation = [panGesture translationInView:view.superview];
NSLog(@"X: %f, Y:%f", translation.x, translation.y);
}else if(panGesture.state == UIGestureRecognizerStateEnded){
CGPoint translation = [panGesture translationInView:view.superview];
NSLog(@"X: %f, Y:%f", translation.x, translation.y);
}
}

我刚刚开始尝试跟踪值之间的差异...尝试告诉他们平移的方式

最佳答案

在 UIPanGestureRecognizer 上您可以使用 -velocityInView:获取识别手势时手指的速度。

例如,如果您想在平移右侧做一件事,在平移左侧做一件事,您可以这样做:

- (void)handleGesture:(UIPanGestureRecognizer *)gestureRecognizer
{
CGPoint velocity = [gestureRecognizer velocityInView:yourView];

if(velocity.x > 0)
{
NSLog(@"gesture went right");
}
else
{
NSLog(@"gesture went left");
}
}

如果您确实想要检测反转,例如您想要将新速度与旧速度进行比较,看看它是否只是在相反的方向(无论是哪个方向),您可以这样做:

// assuming lastGestureVelocity is a class variable...

- (void)handleGesture:(UIPanGestureRecognizer *)gestureRecognizer
{
CGPoint velocity = [gestureRecognizer velocityInView:yourView];

if(velocity.x*lastGestureVelocity.x + velocity.y*lastGestureVelocity.y > 0)
{
NSLog(@"gesture went in the same direction");
}
else
{
NSLog(@"gesture went in the opposite direction");
}

lastGestureVelocity = velocity;
}

乘法和加法可能看起来有点奇怪。它实际上是一个点积,但请放心,如果手势方向相同,它会是一个正数;如果它们完全成直角,它会下降到 0;如果方向相反,它会变成负数方向。

关于iphone - 如何使用 UIPanGestureRecognizer 捕获正在平移的方向?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5187502/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com