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))或者其他一些东西,允许稍微不完美的手指翻译。