- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我使用的是 swift 3,我有一个类是 UIScrollView 的子类。在这里:
import SpriteKit
/// Scroll direction
enum ScrollDirection {
case vertical
case horizontal
}
class CustomScrollView: UIScrollView {
// MARK: - Static Properties
/// Touches allowed
static var disabledTouches = false
/// Scroll view
private static var scrollView: UIScrollView!
// MARK: - Properties
/// Current scene
private let currentScene: SKScene
/// Moveable node
private let moveableNode: SKNode
/// Scroll direction
private let scrollDirection: ScrollDirection
/// Touched nodes
private var nodesTouched = [AnyObject]()
// MARK: - Init
init(frame: CGRect, scene: SKScene, moveableNode: SKNode, scrollDirection: ScrollDirection) {
self.currentScene = scene
self.moveableNode = moveableNode
self.scrollDirection = scrollDirection
super.init(frame: frame)
CustomScrollView.scrollView = self
self.frame = frame
delegate = self
indicatorStyle = .white
isScrollEnabled = true
isUserInteractionEnabled = true
//canCancelContentTouches = false
//self.minimumZoomScale = 1
//self.maximumZoomScale = 3
if scrollDirection == .horizontal {
let flip = CGAffineTransform(scaleX: -1,y: -1)
transform = flip
}
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
/// Began
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
print("begin " + String(CustomScrollView.disabledTouches))
for touch in touches {
let location = touch.location(in: currentScene)
guard !CustomScrollView.disabledTouches else { return }
/// Call touches began in current scene
currentScene.touchesBegan(touches, with: event)
/// Call touches began in all touched nodes in the current scene
nodesTouched = currentScene.nodes(at: location)
for node in nodesTouched {
node.touchesBegan(touches, with: event)
}
}
}
/// Moved
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
print("moved " + String(CustomScrollView.disabledTouches))
for touch in touches {
let location = touch.location(in: currentScene)
guard !CustomScrollView.disabledTouches else { return }
/// Call touches moved in current scene
currentScene.touchesMoved(touches, with: event)
/// Call touches moved in all touched nodes in the current scene
nodesTouched = currentScene.nodes(at: location)
for node in nodesTouched {
node.touchesMoved(touches, with: event)
}
}
}
/// Ended
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch in touches {
let location = touch.location(in: currentScene)
guard !CustomScrollView.disabledTouches else { return }
/// Call touches ended in current scene
currentScene.touchesEnded(touches, with: event)
/// Call touches ended in all touched nodes in the current scene
nodesTouched = currentScene.nodes(at: location)
for node in nodesTouched {
node.touchesEnded(touches, with: event)
}
}
}
/// Cancelled
override func touchesCancelled(_ touches: Set<UITouch>, with event: UIEvent?) {
print("cancelled " + String(CustomScrollView.disabledTouches))
for touch in touches {
let location = touch.location(in: currentScene)
guard !CustomScrollView.disabledTouches else { return }
/// Call touches cancelled in current scene
currentScene.touchesCancelled(touches, with: event)
/// Call touches cancelled in all touched nodes in the current scene
nodesTouched = currentScene.nodes(at: location)
for node in nodesTouched {
node.touchesCancelled(touches, with: event)
}
}
}
}
// MARK: - Touch Controls
extension CustomScrollView {
/// Disable
class func disable() {
CustomScrollView.scrollView?.isUserInteractionEnabled = false
CustomScrollView.disabledTouches = true
}
/// Enable
class func enable() {
CustomScrollView.scrollView?.isUserInteractionEnabled = true
CustomScrollView.disabledTouches = false
}
}
// MARK: - Delegates
extension CustomScrollView: UIScrollViewDelegate {
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if scrollDirection == .horizontal {
moveableNode.position.x = scrollView.contentOffset.x
} else {
moveableNode.position.y = scrollView.contentOffset.y
}
}
}
它的主要功能是创建一个可滚动的菜单,并且在大多数情况下都能正常工作。我在 GameScene 中创建了它的一个对象,它的工作原理是当触摸被注册时,CustomScrollView 中覆盖的触摸函数(touchBegan、touchMoved 等)被调用,然后调用 GameScene 中的触摸函数。这确实发生了,菜单滚动正常,并且调用了 GameScene 的方法。
问题是我的覆盖函数(和 GameScene 的)仅在您水平滑动时被调用。当您向上或向下滑动(超过一定程度)时,菜单仍然滚动,但我认为调用的是 UIScrollView 的触摸方法。
当您垂直滑动时,我的 touchCancelled 方法被调用,这让我认为这与 UIScrollView 的手势识别器(我认为是平移/拖动识别器)在它们不应该触发时触发有关。
是这样吗?如果是这样,我可以禁用识别器吗?如果可以,我应该吗?附带说明一下,这是实现 UIScrollView 以便仍调用 GameScene 的触摸方法的最佳(或至少是可接受的)方式吗?
最佳答案
如果需要同时识别冲突的手势识别器,可以使用gestureRecognizer(_:shouldRecognizeSimultaneouslyWith:)。 ,
关于ios - swift 3 : UIScrollView and (disabling) Gesture Recognizers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40833540/
我使用 jQuery 禁用选择下拉列表中的选项。我需要知道使用之间的区别 prop('disabled','disabled') 和 prop('disabled',true) 两者几乎都适用于所有浏
.attr('disabled', 'disabled') 和 .attr('disabled', true) 在我的代码中都有效,但我只是想知道:两者中哪一个更有效和/或哪一个更常用?真的有区别吗?
我的 asp.net mvc View 中有以下脚本:- function disableform(id) { $('#' + id).prop("disabled", true); } 但是
我已经在 Oracle VM Ware 中为我的 ubuntu 可信操作系统安装了 visual studio 代码和依赖项。我用这些命令运行代码。 ssh -X myserver code 但是当我
我有这个函数可以切换输入字段的禁用属性: $('.someElement').click(function(){ if (someCondition) { console.log
自从前几天我升级了 angularjs 后,我一直收到警告。每当我打开 ui.bootstrap 模式时,它都会发生。 这是我在 chrome-beta 44 中收到的警告: angular.js:1
我想限制用户在单击特定按钮时在文本框中输入值,否则设置禁用 false。如果我设置 $("#txtquery").attr("disabled","disabled"); 它将文本框设置为空白。如果切
How do I make a Spinner's "disabled" state look disabled? 可能重复. 我尝试了帖子中提到的解决方案,即 ((Spinner) spinner)
这段代码: $tds = $(this).closest('tr').find(td input,select); $tds.attr('disabled','disabled'); 使我的表格行不
使用 jQM 1.4.0我试图覆盖灰色样式(): input[type="text"]:disabled { opacity: 1.0 !important; color: black
不知道为什么这不起作用。 当人们单击我的应用程序的“编辑”按钮时,禁用的文本字段将变为可编辑: $("#bewerken").click(function(e) { $("input[d
我对以下差异有些困惑: swiftlint:disable:next swiftlint:disable:this 最佳答案 它们都用于禁用单行的快速规则。您还可以为单行启用规则。来自 SwiftLi
我看到一些代码 # pylint: disable=W0123 还有一些 # pylint: disable-msg=W0123 它们只是同义词吗? 最佳答案 从 pylint 0.21.0 开始不推
默认情况下,在桌面上,flutter 中的 btns 在禁用时会更改鼠标光标: 我们想禁用此行为,或替换为不同的光标。 最佳答案 要覆盖 ElevatedButton、TextButton 或 Out
我一直在学习很多关于标准 asp.net 验证器的知识,我的最新发现是关于如何禁用验证器客户端,这非常酷。 现在,如果我的初始帖子启用了验证器,但在客户端,我禁用它,服务器端是否识别客户端更改并保留它
默认情况下,在桌面上,flutter 中的 btns 在禁用时会更改鼠标光标: 我们想禁用此行为,或替换为不同的光标。 最佳答案 要覆盖 ElevatedButton、TextButton 或 Out
这个问题在这里已经有了答案: Should I use CSS :disabled pseudo-class or [disabled] attribute selector or is it a
我有一个 python 脚本,它发送包含文本、html 和 ics 附件的多部分电子邮件。这个想法是,现代电子邮件客户端将呈现 HTML 部分并提供将事件添加到用户日历中的功能。 代码如下: impo
我有一个最初被禁用的按钮: Lorem ipsum 对于此按钮,button.getAttribute('disabled') 返回 "disabled"。但是,当我使用 JavaScript 启用此
在我的一些测试中,我必须确认在设置某些标志时某些 select2 下拉菜单被禁用。为了证实这一点,我发现以下策略似乎有效: Assert.True(element.GetAttribute("disa
我是一名优秀的程序员,十分优秀!