Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.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
Ios I';我们让UIPangestureRecognitor只检测大部分垂直平移,如何让它只检测真正的垂直平移?_Ios_Objective C_Uigesturerecognizer_Uipangesturerecognizer - Fatal编程技术网

Ios I';我们让UIPangestureRecognitor只检测大部分垂直平移,如何让它只检测真正的垂直平移?

Ios I';我们让UIPangestureRecognitor只检测大部分垂直平移,如何让它只检测真正的垂直平移?,ios,objective-c,uigesturerecognizer,uipangesturerecognizer,Ios,Objective C,Uigesturerecognizer,Uipangesturerecognizer,我刚刚实现了这一点: - (BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)panGestureRecognizer { CGPoint translation = [panGestureRecognizer translationInView:someView]; return fabs(translation.y) > fabs(translation.x); } (如上所述。) 但是如果用户在对

我刚刚实现了这一点:

- (BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)panGestureRecognizer {
    CGPoint translation = [panGestureRecognizer translationInView:someView];
    return fabs(translation.y) > fabs(translation.x);
}
(如上所述。)

但是如果用户在对角线上垂直平移,它将开始。如何使其认为垂直的公差更严格

基本上,下图描述了我的目标。第一个图表是它现在检测到的,该区域内的任何东西,第二个是我希望它做的


检测纯垂直手势,我假设
translation.x==0


你也应该检查你引用的帖子的正确答案。他将以前的位置与当前位置进行比较。你可以创造感性。你可以检查我的,例如,看看,我用这个敏感度来定义,什么时候一个动作是有效的(小于或等于敏感度)或者无效的(大于敏感度)。检查
rpslideervewcontroller.m

内的
MOVEMENT\u敏感性,如果检测到纯垂直手势,我假设
translation.x==0


你也应该检查你引用的帖子的正确答案。他将以前的位置与当前位置进行比较。你可以创造感性。你可以检查我的,例如,看看,我用这个敏感度来定义,什么时候一个动作是有效的(小于或等于敏感度)或者无效的(大于敏感度)。检查
rpslideervewcontroller.m

中的
MOVEMENT\u sensitivity
,我已经为此编写了一次
uigestureRecognitizer
子类。它只跟踪垂直平移。也许这对你有帮助。您可以将其用作任何其他手势识别器,只需设置阈值并在其目标的动作方法中跟踪平移

垂直测量识别器.h

#import <UIKit/UIKit.h>
#import <UIKit/UIGestureRecognizerSubclass.h>

@interface VerticalPanGestureRecognizer : UIGestureRecognizer

@property (assign, nonatomic)float translation;
@property (assign, nonatomic)float offsetThreshold;

@end

我曾经为此编写过一个
uigesturecognizer
子类。它只跟踪垂直平移。也许这对你有帮助。您可以将其用作任何其他手势识别器,只需设置阈值并在其目标的动作方法中跟踪平移

垂直测量识别器.h

#import <UIKit/UIKit.h>
#import <UIKit/UIGestureRecognizerSubclass.h>

@interface VerticalPanGestureRecognizer : UIGestureRecognizer

@property (assign, nonatomic)float translation;
@property (assign, nonatomic)float offsetThreshold;

@end

您可以使用给定的
x
y
值来计算垂直角度。例如,如果角度与垂直方向的夹角小于4度,则要开始手势,可以执行以下操作:

- (BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)gesture {
    CGPoint translation = [gesture translationInView:gesture.view];
    if (translation.x != 0 || translation.y != 0) {
        CGFloat angle = atan2f(fabs(translation.x), fabs(translation.y));
        return angle < (4.0 * M_PI / 180.0); // four degrees, but in radians
    }
    return FALSE;
}
-(BOOL)手势识别器应开始:(UIPangestureRecognitor*)手势{
CGPoint translation=[手势翻译视图:手势.视图];
if(translation.x!=0 | | translation.y!=0){
CGFloat角度=atan2f(晶圆厂(平移.x),晶圆厂(平移.y));
返回角<(4.0*M_PI/180.0);//四度,但以弧度为单位
}
返回FALSE;
}

您可以使用给定的
x
y
值来计算垂直角度。例如,如果角度与垂直方向的夹角小于4度,则要开始手势,可以执行以下操作:

- (BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)gesture {
    CGPoint translation = [gesture translationInView:gesture.view];
    if (translation.x != 0 || translation.y != 0) {
        CGFloat angle = atan2f(fabs(translation.x), fabs(translation.y));
        return angle < (4.0 * M_PI / 180.0); // four degrees, but in radians
    }
    return FALSE;
}
-(BOOL)手势识别器应开始:(UIPangestureRecognitor*)手势{
CGPoint translation=[手势翻译视图:手势.视图];
if(translation.x!=0 | | translation.y!=0){
CGFloat角度=atan2f(晶圆厂(平移.x),晶圆厂(平移.y));
返回角<(4.0*M_PI/180.0);//四度,但以弧度为单位
}
返回FALSE;
}

这太棒了。这正是我偶然发现这个问题时所需要的。我会把它改为:if((translation.x>0)和(&&(translation.x<40))或者其他一些东西,允许稍微不完美的手指翻译。这太棒了。这正是我偶然发现这个问题时所需要的。我会把它改为:if((translation.x>0)和&(translation.x<40))或者其他一些东西,允许稍微不完美的手指翻译。