pressGestureRecognizer and touchesBegan
Posted
技术标签:
【中文标题】pressGestureRecognizer and touchesBegan【英文标题】: 【发布时间】:2013-02-06 13:17:49 【问题描述】:我有以下问题。
我正在使用UILongPressGestureRecognizer
将 UIView 置于“切换模式”。如果UIView
处于“切换模式”,则用户可以在屏幕上拖动 UIView。为了在屏幕上拖动 UIView,我使用了 touchesBegan
、touchesMoved
和 touchesEnded
方法。
它有效,但是:我必须抬起手指才能拖动它,因为 touchesBegan
方法已被调用,因此不会再次调用,因此我无法在屏幕上拖动 UIView
。
有没有办法在UILongPressGestureRecognizer
被触发后手动调用touchesBegan
(UILongPressGestureRecognizer
更改了 BOOL 值,touchesBegan
仅在此 BOOL 设置为 YES 时才有效)。
【问题讨论】:
Can UILongPressGestureRecognizer be used together with touch events like touchesMoved?的可能重复 【参考方案1】:UILongPressGestureRecognizer
是一个连续的手势识别器,所以不要诉诸touchesMoved
或UIPanGestureRecognizer
,只需检查UIGestureRecognizerStateChanged
,例如:
- (void)viewDidLoad
[super viewDidLoad];
UILongPressGestureRecognizer *gesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];
[self.view addGestureRecognizer:gesture];
- (void)handleGesture:(UILongPressGestureRecognizer *)gesture
CGPoint location = [gesture locationInView:gesture.view];
if (gesture.state == UIGestureRecognizerStateBegan)
// user held down their finger on the screen
// gesture started, entering the "toggle mode"
else if (gesture.state == UIGestureRecognizerStateChanged)
// user did not lift finger, but now proceeded to move finger
// do here whatever you wanted to do in the touchesMoved
else if (gesture.state == UIGestureRecognizerStateEnded)
// user lifted their finger
// all done, leaving the "toggle mode"
【讨论】:
我已经为这个答案寻找了很多个晚上,我的好先生。我已经尝试了几乎所有我知道的方法,以便在长按中间触发 touchesMoved ......它根本行不通。检查状态 .Changed 成功了。非常感谢@Rob。【参考方案2】:我建议您使用 UIPanGestureRecognizer 作为推荐的拖动手势。
您可以配置最小值。和最大。平移所需的触摸次数,使用以下属性:
maximumNumberOfTouches
minimumNumberOfTouches
您可以处理 Began、Changed 和 Ended 等状态,例如为所需状态设置动画。
使用以下方法将点转换为您想要的 UIView。
- (void)setTranslation:(CGPoint)translation inView:(UIView *)view
示例:
您必须使用全局变量来保留旧框架。在 UIGestureRecognizerStateBegan 中获取它。
当状态为 UIGestureRecognizerStateChanged 时。您可以使用
-(void) pannningMyView:(UIPanGestureRecognizer*) panGesture if(panGesture.state==UIGestureRecognizerStateBegan) //retain the original state else if(panGesture.state==UIGestureRecognizerStateChanged) CGPoint translatedPoint=[panGesture translationInView:self.view]; //here you manage to get your new drag points.
阻力的速度。根据速度,您可以提供动画来显示 UIView 的弹跳
- (CGPoint)velocityInView:(UIView *)view
【讨论】:
感谢您的回答,但是如何获取翻译的坐标?以上是关于pressGestureRecognizer and touchesBegan的主要内容,如果未能解决你的问题,请参考以下文章
TypeError: undefined is not an object , item is from an array from an API
[Creating an image format with an unknown type is an error] on cordova, ios 10
使用 PHAssets 时出现此错误:Creating an image format with an unknown type is an error