我有一个UIView
包含a UIScrollView
,我希望能够UIView
在用户点击的任何时候捕获"Touch Down"事件UIScrollView
.
我已经尝试将所有touchesBegan/Ended/Cancelled处理程序包含在我的中,UIViewController
但是当点击UIScrollView
main中包含的内容时,它们都没有被触发UIView
.
完成此任务的最佳方法是什么?
我是Android编程和Java的新手(虽然我有一些C#的经验,所以这有帮助).
在这一刻,我正在四处闲逛,了解一切是如何运作的.我做了一个实现onTouchListener的活动.我已经覆盖了onTouch,并在event.getAction()上进行了切换:
public boolean onTouch(View v, MotionEvent event)
{
float x;
float y;
switch (event.getAction())
{
case MotionEvent.ACTION_DOWN: // gets called
{
x = event.getX();
y = event.getY();
circle c = new circle(this, x, y, 10, 0xFFFFFF);
_main.addView(c, tapCount++);
break;
}
case MotionEvent.ACTION_MOVE: // doesnt seem to do anything
{
x = event.getX();
y = event.getY();
circle c = new circle(this, x, y, 10, 0xFFFFFF);
_main.addView(c, tapCount++);
break;
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
"circle"是一个绘制圆圈的类.
当我将手指拖过屏幕时,我期望看到的是一圈圆圈.相反,当我开始触摸时,圆圈才会被绘制.
我将我的代码与示例进行了比较(例如:Google的这篇博文:http://android-developers.blogspot.com/2010/06/making-sense-of-multitouch.html)我找不到我的错误. …
在这里,我想在android中使用onTouchevent来突出显示这个文本
我试图让jQuery拖放与iPad touch事件很好地协同工作.我在互联网上找到了这个代码:
function touchHandler(event)
{
var touches = event.changedTouches,
first = touches[0],
type = "";
switch (event.type)
{
case "touchstart": type = "mousedown"; break;
case "touchmove": type = "mousemove"; break;
case "touchend": type = "mouseup"; break;
default: return;
}
//initMouseEvent(type, canBubble, cancelable, view, clickCount,
// screenX, screenY, clientX, clientY, ctrlKey,
// altKey, shiftKey, metaKey, button, relatedTarget);
var simulatedEvent = document.createEvent("MouseEvent");
simulatedEvent.initMouseEvent(type, true, true, window, 1,
first.screenX, first.screenY,
first.clientX, first.clientY, false,
false, false, false, 0/*left*/, null);
first.target.dispatchEvent(simulatedEvent);
event.preventDefault();
}
Run Code Online (Sandbox Code Playgroud)
如果我将touchHandler附加到document …
我写了一个小例子页面,其中包含可在触摸设备上拖动的元素(基于Peter-Paul Koch编写的代码).
我有两个可拖动的<div>
元素:一个绿色块和一个红色球(用球形制成border-radius
).拖动与实施ontouchstart
,ontouchmove
以及ontouchend
和"动漫"是通过改变完成top
和left
这些元素的CSS属性.
当我拖动绿色的时候,一切都是玫瑰和ponycorns.
但是当我在Safari 1(运行iOS 5.1.1)或iPad 3(6.0.1)上拖动Safari中的红色时,我会得到一些浅红色的小径,其中圆圈的后边缘(见下面的截图).
但是,我不会在iPhone 5(6.1.4)上看到这些路径.
有没有办法摆脱这些痕迹?
(奖金问题:这个效果是否有一个术语?"重影"?"文物"?)
我的应用对移动设备的响应速度较慢.似乎很多(所有?)浏览器都会延迟300毫秒来判断触摸是简单触摸还是双触摸.
有解决方案,像fastclick,但我想知道是否有一个使用Dart代码?
编辑:有一种方法preventGhostClick
:ClickBuster.dart,有没有人尝试过这种方法?例?
我已经为iPhone创建了一个侧视图菜单,我已经使用集装箱船概念在父视图控制器中添加子视图控制器.当用户点击导航栏上的菜单按钮时,我只需更改子视图控制器的框架,使其像一个显示菜单一样设置动画,以便子视图控制器将其框架的一半剪裁到右侧.
现在我的问题是每当用户点击子视图控制器的任何部分时我只想通知其父视图控制器触发事件已在其子视图控制器上触发,以便父视图控制器可以重置子视图控制器的帧以使其动画化喜欢关闭半显示菜单.
我使用了tap手势并将其添加到子视图控制器子视图的每个子视图中.因此,在任何子视图上点击手势都会通知父视图控制器有关触摸事件的信息.
触摸事件适用于子视图控制器的主视图,但任何按钮上的任何触摸都无法识别TAP事件.
我不知道我在哪里误会.请帮助我如何通知父视图控制器其子视图控制器中的任何触摸.提前致谢.
iphone parentviewcontroller touch-event ios childviewcontroller
布局
在OuterView1和InnerView2上,我想捕获这些触摸事件onSingleTapConfirmed()和onFling().OuterView1和InnerView2重叠的区域,我希望将控件传递给两个视图的触摸事件方法.
我试过这个:
集装箱类
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
outerView1.onTouchEvent(ev);
innerView2.onTouchEvent(ev);
return false;
}
Run Code Online (Sandbox Code Playgroud)
OuterView1类
@Override
public boolean onTouchEvent(MotionEvent event) {
gesture.onTouchEvent(event);
return true;
}
Run Code Online (Sandbox Code Playgroud)
gesture是GestureDetector.SimpleOnGestureListener的一个实例,带有onDown(),onFling()和onSingleTapConfirmed()方法的日志语句
InnerView2类
@Override
public boolean onTouchEvent(MotionEvent event) {
gesture.onTouchEvent(event);
return true;
}
Run Code Online (Sandbox Code Playgroud)
gesture是GestureDetector.SimpleOnGestureListener的一个实例,带有onDown(),onFling()和onSingleTapConfirmed()方法的日志语句
通过这种方法,我始终在两个视图的onDown()方法中进行回调.但我没有看到onSingleTapConfirmed()和onFling()方法的一致行为
当我点击红色圆圈(在屏幕截图中)三次,我有三种不同的行为
首先尝试(期望的行为)
10-14 09:03:14.155: I/OuterView1(27776): OuterView1.onDown()
10-14 09:03:14.155: I/InnerView2(27776): InnerView2.onDown()
10-14 09:03:14.155: W/GestureDetector(27776): [pen gesture] isConsideredDoubleTap - timeout
10-14 09:03:14.155: I/InnerView2(27776): InnerView2.onDown()
10-14 09:03:14.460: I/OuterView1(27776): OuterView1.onSingleTapConfirmed()
10-14 09:03:14.460: I/InnerView2(27776): InnerView2.onSingleTapConfirmed()
Run Code Online (Sandbox Code Playgroud)第二次尝试(只有一个视图获得onSingleTapConfirmed())
10-14 09:04:11.615: I/OuterView1(27776): …
Run Code Online (Sandbox Code Playgroud)在这里的Apple文档高级场景处理中,它描述了update
方法以及如何渲染场景,但没有提到何时处理输入.目前尚不清楚它是否与渲染循环位于同一个线程中,或者它是否与它并发.
如果我有一个从SKScene
update
方法和touchesBegan
方法更新的对象(在这种情况下为a SKSpriteNode
),我是否要担心同步对象的两次访问?
这是对我之前对iOS中UITextView中的属性文本检测问题的回答的补充问题.
我使用Xcode 7.1.1和iOS 9.1重新测试了以下代码,它可以与我链接的答案中描述的设置一起使用.
import UIKit
class ViewController: UIViewController, UIGestureRecognizerDelegate {
@IBOutlet weak var textView: UITextView!
override func viewDidLoad() {
super.viewDidLoad()
// Create an attributed string
let myString = NSMutableAttributedString(string: "Swift attributed text")
// Set an attribute on part of the string
let myRange = NSRange(location: 0, length: 5) // range of "Swift"
let myCustomAttribute = [ "MyCustomAttributeName": "some value"]
myString.addAttributes(myCustomAttribute, range: myRange)
textView.attributedText = myString
// Add tap gesture recognizer to Text View
let …
Run Code Online (Sandbox Code Playgroud) touch-event ×10
ios ×5
android ×3
javascript ×2
objective-c ×2
css ×1
css3 ×1
dart ×1
iphone ×1
java ×1
jquery ×1
jquery-ui ×1
mobile ×1
overlapping ×1
sprite-kit ×1
swift ×1
touch ×1
touchesbegan ×1
uiscrollview ×1
uitextview ×1
uiview ×1