- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我的问题:有没有办法调整 UIPanGestureRecognizer 的“敏感度”,使其“更快”开启,即在移动较少数量的“像素”之后?
我有一个带有 UIImageView 的简单应用程序,以及与此相关联的捏合和平移手势识别器,以便用户可以放大图像并手动在图像上绘制。工作正常。
但是,我注意到常用的 UIPanGestureRecognizer 不会返回 UIGestureRecognizerState.Changed 的值,直到用户的手势移动了大约 10 个像素。
示例:这是一张屏幕截图,显示了我尝试绘制的几条线越来越短,并且有一个明显的有限长度,低于该长度不会绘制任何线,因为平移手势识别器永远不会改变状态。
IllustrationOfProgressivelyShorterLines.png
...即,在黄线的右侧,我仍在尝试绘制,并且我的触摸被识别为 touchesMoved 事件,但是 UIPanGestureRecognizer 没有触发它自己的“移动”事件,因此什么都没有被吸引。
(注意/澄清:该图像占据了我 iPad 的整个屏幕,因此即使在识别器没有发生状态变化的情况下,我的手指物理移动也超过一英寸。只是我们'根据捏合手势识别器生成的转换重新“放大”,因此图像的几个“像素”占据了大量屏幕。)
这不是我想要的。关于如何解决它的任何想法?
如果我对它进行子分类,也许我可以获得 UIPanGestureRecognizer 的一些“内部”参数?我想我会尝试以诸如...的方式对识别器进行子类化。
class BetterPanGestureRecognizer: UIPanGestureRecognizer {
var initialTouchLocation: CGPoint!
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent) {
super.touchesBegan(touches, withEvent: event)
initialTouchLocation = touches.first!.locationInView(view)
print("pan: touch begin detected")
print(self.state.hashValue) // this lets me check the state
}
override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent) {
super.touchesMoved(touches, withEvent: event)
print("pan: touch move detected")
print(self.state.hashValue) // this remains at the "began" value until you get beyond about 10 pixels
let some_criterion = (touches.first!.isEqual(something) && event.isEqual(somethingElse))
if (some_criterion) {
self.state = UIGestureRecognizerState.Changed
}
}
}
...但我不确定要为 some_criterion 等使用什么
有什么建议吗?
.
其他可行的替代方案,但我宁愿不必这样做:
谢谢。
最佳答案
[如果值得的话,我会选择你的答案而不是我的答案(即以下),所以我暂时不会“接受”这个答案。]
明白了。该解决方案的基本思想是在触摸移动时更改状态,但使用关于同步手势识别器的委托(delegate)方法,以免“锁定”任何捏合(或旋转)手势。这将允许单指和/或多指平移,如您所愿,没有“冲突”。
那么,这是我的代码:
class BetterPanGestureRecognizer: UIPanGestureRecognizer, UIGestureRecognizerDelegate {
var initialTouchLocation: CGPoint!
override init(target: AnyObject?, action: Selector) {
super.init(target: target, action: action)
self.delegate = self
}
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent) {
super.touchesBegan(touches, withEvent: event)
initialTouchLocation = touches.first!.locationInView(view)
}
override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent) {
super.touchesMoved(touches, withEvent: event)
if UIGestureRecognizerState.Possible == self.state {
self.state = UIGestureRecognizerState.Changed
}
}
func gestureRecognizer(_: UIGestureRecognizer,
shouldRecognizeSimultaneouslyWithGestureRecognizer:UIGestureRecognizer) -> Bool {
if !(shouldRecognizeSimultaneouslyWithGestureRecognizer is UIPanGestureRecognizer) {
return true
} else {
return false
}
}
}
通常将“shouldRecognizeSimultaneouslyWithGestureRecognizer”委托(delegate)设置为 true always 是许多人可能想要的。如果另一个识别器是另一个 Pan,我让委托(delegate)返回 false,只是因为我注意到没有那个逻辑(即,无论如何让委托(delegate)返回 true),它是“通过” Pan 手势到底层 View ,我不想那样。无论如何,您可能只想让它返回 true。干杯。
关于iOS UIPanGestureRecognizer : adjust sensitivity?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32130537/
我收到此错误如何解决? 我尝试通过安装它然后我也遇到了问题npm install autoprefixer@10.4.5 --save-exact WARNING in ./node_modules/
我有一个 ListView,其中 EditTexts 作为项目。 我已经尝试设置 android:windowSoftInputMode="adjustPan" 和 "adjustResize" li
我有一个 p.value 数据框,每列都有变量名。 我的代码是sapply(pval,p.adjust,method="fdr")。 此代码返回基于每列调整的qvalue,这意味着p基于每列排名然后调
我的自定义图形项目有 (0,-60 60x60) 边界矩形。当我调整坐标时 rect.adjusted(-5,-5,5,5) 新的boundingRect返回(-5,-65,70x70)。我阅读了文档
我有一个 UITableViewController,它嵌入到 TabbarController 中,而 TabbarController 又嵌入到 UINavigationController 中。
我有一个进度条,我正在尝试根据 :after 伪元素的 content 调整父项的高度。运行代码后,您会看到 30% 部分位于 div 内。 有没有办法调整 :after 附加到的元素的高度? 我尝试
我的问题:有没有办法调整 UIPanGestureRecognizer 的“敏感度”,使其“更快”开启,即在移动较少数量的“像素”之后? 我有一个带有 UIImageView 的简单应用程序,以及与此
我在创建我的移动应用程序时使用了以下 config.lua 文件。 构 build 备时,屏幕不会适应 iPhone5。但是,它会在 corona 提供的模拟器上运行时进行调整。 你能告诉我问题是出在
我正在开发一个应用程序,它可以扫描数千个结构副本; ~1 GB 内存。速度很重要。 ParallelScan(_from, _to); //In a new thread 我手动调整线程数
我有一段代码必须在每天的特定时间执行。如果我安排它在每天晚上 9 点执行,那么即使在夏令时切换期间它也必须工作。 可以使用哪个 Java API 来实现这一点? int ONE_DAY = 1000
我想在自定义列表适配器的一个节点中显示一个 ImageView、2 个 TextViews 和一个 Rating Bar 但当我将其裁剪时运行代码 这里是自定义列表的xml代码 Here is the
在我的项目中,我定义了一个 xib 和一个将包含 xib 的 ViewController。 class FeedDetailViewController: UIViewController, Fee
我正在尝试做一个垂直下拉菜单。这是我的代码 .menu li:hover>ul{ position:absolute; display:inline; left:120px; top:
我想在 font-family (font-family:A, B;) 中指定两种不同的字体,但是这两种字体的大小不同。 font-size-adjust 似乎只能在 Firefox 中使用。那么,如
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 7 年前。 Improve this q
这个问题已经有答案了: JavaFX BarChart xAxis labels bad positioning (4 个回答) 已关闭 4 年前。 我正在使用 JavaFX 编写一个小直方图。我使用
我有一个非常简单的场景,但我真的坚持了下来,需要你的帮助。 这是我必须做的。 这是一个带有右边框和底边框以及顶部有图像的 div。我必须显示与此相同的文本。为此,我正在使用这样的 Bootstrap
我为此做了一些窥探。有一些解决方案,但我无法正确理解它们。我试图实现旋转矩阵,但我做不到。我创建了一个简单的 fiddle ,点击图像旋转 90 度(不包括我的实现,因为我不明白如何去做)。下面是那个
我想调整 table 标签中的图像,如果在单个 tr 中有四个图像,在第二个 tr
这是我的设置: SKScene 有一个名为 world 的节点 在这个世界上,我附加了另一个节点:车辆 我将三个节点附加到这辆车上;一个 body 和两个轮子 轮子通过指定 anchor 的 SKPh
我是一名优秀的程序员,十分优秀!