我试图区分iPhone上的两个(或更多)UITouch对象.具体来说,我想知道触摸发生的顺序.
例如,在我的-touchesBegan:withEvent:方法中,我获得了一个UITouch对象的NSSet.现在我可以找出有多少触摸,但是,哪个对象代表哪个手指?
我注意到UITouch上的时间戳属性 - 这就是我要找的东西吗?我知道如何获得最后一次或第一次触摸是有用的 - 提供触摸不会变异......
这就是我的问题所在.我可以使用时间戳来挑出最新的触摸,但随后首先发生的触摸移动,IT成为最新的触摸......
在本练习结束时,我希望能够实现"捏"手势来放大或缩小等.
非常感谢任何帮助,谢谢.
如果我在第一次触摸时抬起手指,那么它会识别下一次触摸就好了.只有当我持续第一次触摸然后尝试用不同的手指同时触摸另一个区域时.然后它将错误地将第二次触摸记录为再次从第一次触摸开始.
更新它与touchesEnded有关,直到最后的触摸结束才被调用(它不关心你是否已经有5个其他触摸结束,然后你终于放弃了最后一个...它将它们全部调用结束一旦最后的触摸结束)
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch* touch = [touches anyObject];
NSString* filename = [listOfStuff objectAtIndex:[touch view].tag];
// do something with the filename now
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
ITouch* touch = [touches anyObject];
NSString* buttonPressed = [listOfStuff objectAtIndex:[touch view].tag];
// do something with this info now
}
Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我添加了3.2 SDK中提供的新手势识别器.一切似乎都正常工作,屏幕上的响应时间非常快.但由于某种原因,当我添加requireGestureRecognizerToFail一些手势时,触发手势时会出现非常明显的延迟.下面是我用来创建手势识别器的代码片段.有谁知道为什么会有延迟以及我如何解决它?我requireGestureRecognizerToFail用来防止SingleTap手势在用户执行时触发DoubleTap.
- (void)createGestureRecognizers {
//Single Finger Double-Tap
UITapGestureRecognizer *singleFingerDTap = [[UITapGestureRecognizer alloc]
initWithTarget:self action:@selector(handleSingleDoubleTap:)];
singleFingerDTap.numberOfTapsRequired = 2;
[super addGestureRecognizer:singleFingerDTap];
//Single Finger Tap
UITapGestureRecognizer *singleFingerTap = [[UITapGestureRecognizer alloc]
initWithTarget:self action:@selector(handleSingleTap:)];
singleFingerTap.numberOfTapsRequired = 1;
[singleFingerTap requireGestureRecognizerToFail:singleFingerDTap];
[self addGestureRecognizer:singleFingerTap];
//Two Finger Pan
UIPanGestureRecognizer *panGesture2 = [[UIPanGestureRecognizer alloc]
initWithTarget:self action:@selector(handlePanGesture2:)];
panGesture2.maximumNumberOfTouches = 2;
[super addGestureRecognizer:panGesture2];
//Single Finger Pan
UIPanGestureRecognizer *panGesture1 = [[UIPanGestureRecognizer alloc]
initWithTarget:self action:@selector(handlePanGesture1:)];
panGesture1.maximumNumberOfTouches = 1;
[panGesture1 requireGestureRecognizerToFail:panGesture2];
[super addGestureRecognizer:panGesture1];
[singleFingerDTap release];
[singleFingerTap …Run Code Online (Sandbox Code Playgroud) 我知道有很多方法可以直接在iPhone上实现(jQtouch),但我想在计算机的浏览器中检测这些事件.
我开发了一个在视图中处理多点触控的Android应用程序.我基本上跟踪可能出现的几个MotionEvent,如ACTION_UP,ACTION_MOVE,...我在View类中覆盖的onTouch方法如下所示:
public boolean onTouch(View view, MotionEvent event)
{
int action = event.getAction() & MotionEvent.ACTION_MASK;
if (action == MotionEvent.ACTION_DOWN) {
float x = event.getX();
handleTouchStart(view, x);
} else if (action == MotionEvent.ACTION_UP) {
float x = event.getX();
handleTouchEnded(view, x);
} else if (action == MotionEvent.ACTION_POINTER_DOWN) {
int pointer = (event.getAction() & MotionEvent.ACTION_POINTER_ID_MASK) >> MotionEvent.ACTION_POINTER_ID_SHIFT;
float x = event.getX(pointer);
handleTouchStart(view, x);
} else if (action == MotionEvent.ACTION_POINTER_UP) {
int pointer = (event.getAction() & MotionEvent.ACTION_POINTER_ID_MASK) >> MotionEvent.ACTION_POINTER_ID_SHIFT;
float x = event.getX(pointer);
handleTouchEnded(view, x); …Run Code Online (Sandbox Code Playgroud) 我找不到任何解释丢失的UITouch事件的东西.如果你在屏幕上粉碎你的整个手足够多次,touchesBegan的数量将不同于touchesEnded的数量!我认为实际了解这些孤立触摸的唯一方法是自己引用它们并跟踪它们没有移动多长时间.
示例代码:
int touchesStarted = 0;
int touchesFinished = 0;
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
touchesStarted += touches.count;
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
touchesFinished += touches.count;
NSLog(@"%d / %d", touchesStarted, touchesFinished);
}
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
[self touchesEnded:touches withEvent:event];
}
Run Code Online (Sandbox Code Playgroud) 我正在编写一个只使用本机代码的应用程序.
那么有可能在ndk中获得多点触控事件吗?
我觉得我已经整个网络,但没有找到任何东西!
有谁知道如何做到这一点?
java-native-interface events android multi-touch android-ndk
我有一些关于触摸事件掩盖的小问题.我在这里和其他地方看过很多东西,但我仍然对部分感到困惑.
1)event.getActionMasked()相同event.getAction() & MotionEvent.ACTION_MASK(它们似乎在三星S2和HTC Desire上)
2)上述两个命令是否会提供所有信息,而不仅仅是这些信息event.getAction(),或者它是否有所不同.
3)我编写了一段代码,简单地说明了触摸的位置和指针ID,或指针是否未被使用(此刻仅写入两次触摸).它似乎在上面提到的设备上正常工作,但是我知道如果没有完全正确的话,某些设备可以采取非常不同的行为.因此,我想知道以下是否正确并且将在所有设备上运行.
boolean pointer0down=false, pointer1down=false;
String st="", str0 ="", str1 ="";
public boolean onTouchEvent( MotionEvent event )
{
if (event.getActionMasked()==MotionEvent.ACTION_UP
||event.getActionMasked()==MotionEvent.ACTION_POINTER_UP
||event.getActionMasked()==MotionEvent.ACTION_CANCEL)
{
if (event.getPointerId((event.getActionIndex()& MotionEvent.ACTION_MASK))==0)
pointer0down=false;
if (event.getPointerId((event.getActionIndex()& MotionEvent.ACTION_MASK))==1)
pointer1down=false;
}
if (event.getActionMasked()==MotionEvent.ACTION_DOWN
||event.getActionMasked()==MotionEvent.ACTION_POINTER_DOWN)
{
if (event.getPointerId((event.getActionIndex()& MotionEvent.ACTION_MASK))==0)
pointer0down=true;
if (event.getPointerId((event.getActionIndex()& MotionEvent.ACTION_MASK))==1)
pointer1down=true;
}
if (pointer0down)
str0="\tx: " + event.getX(0) + "\ty: "+event.getY(0);
else
str0="\tNot down";
if (pointer1down )
str1="\tx: " + event.getX(1) + "\ty: "+event.getY(1);
else
str1="\tNot …Run Code Online (Sandbox Code Playgroud) 我的应用程序在每个屏幕上都有相当多的按钮以及UIBarButtonItem后退按钮,我遇到了人们能够多点击按钮的问题.我一次只需要一个按钮就可以点击.
有谁知道如何使UIBarButtonItem后退按钮专用于触摸?
我设法通过将每个视图设置为isExclusiveTouch = true来禁用多次单击UIButton,但这似乎不计入导航栏中的后退按钮.
后退按钮似乎不符合isExclusiveTouch.
有没有人有一个简单的工作,不涉及编码每个按钮发送事件?
非常感谢,
Krivvenz.
multi-touch ×10
iphone ×4
android ×3
events ×2
android-ndk ×1
back-button ×1
gesture ×1
input ×1
ios ×1
ipad ×1
javascript ×1
mask ×1
objective-c ×1
swift ×1
touch ×1
touchesbegan ×1
uibutton ×1
uievent ×1
uikit ×1
uitouch ×1