Touchesmoved - 一次拖动更新多个元素
Posted
技术标签:
【中文标题】Touchesmoved - 一次拖动更新多个元素【英文标题】:Touchesmoved - updating multiple elements on single drag 【发布时间】:2016-09-04 08:33:55 【问题描述】:我正在尝试在单击并拖动元素时更新多个图像。我已经实现了 touchesbegan、touchesmoved 和 touchesended,但是我不知道如何使 touchesmoved 效果多个图像。
我一直在网上搜索,但找不到任何关于此的指南。如果你能指出我正确的方向,或者给我一些基本的建议,那将不胜感激。
以下是示例图片:
编辑:以下是可能的示例图像:
What it should look like.
我希望能够通过相同的印刷机以相同的方式影响其他字母,改变它们的图片。这些图片是临时图片。
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?)
print("touches began:\(touches)")
override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?)
self.image = UIImage(named: "slot")!
print("touches moved:\(touches)")
override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?)
self.image = UIImage(named: "tile")!
print("touches ended")
【问题讨论】:
你有它应该如何工作的 gifs 吗? 它应该工作的方式是您将手指拖到每个元素上,然后将它们从像 E 的图片更改为像 S 的图片,并获取每个元素的值的字母。我发现一篇文章说在上面的超级视图中这样做可能是可取的?我添加了一个应该是什么样子的示例。 【参考方案1】:如果我理解正确的话,应该是这样的:
class ChangableView: UIView
private var touchedImageView: UIImageView?
didSet
if oldValue == touchedImageView return
if let oldValue = oldValue
oldValue.image = UIImage(named: "tile")!
if let newValue = touchedImageView
newValue.image = UIImage(named: "slot")!
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?)
guard let touch = touches.first else return
updateTouchedImageViewWithTouch(touch, event: event)
override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?)
guard let touch = touches.first else return
updateTouchedImageViewWithTouch(touch, event: event)
override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?)
touchedImageView = nil
private extension ChangableView
func updateTouchedImageViewWithTouch(touch: UITouch, event: UIEvent?)
let touchPoint = touch.locationInView(self)
let touchedView = self.hitTest(touchPoint, withEvent: event)
touchedImageView = touchedView as? UIImageView
此外,您的 UIViewController 应该有一个 ChangableView 的子类作为视图,并且不要忘记将所有 UIImageViews 的 userInteractionEnabled 属性设置为 YES。
【讨论】:
以上是关于Touchesmoved - 一次拖动更新多个元素的主要内容,如果未能解决你的问题,请参考以下文章
touchesbegin, touchesmoved, touchesended 问题
如何在 Swift 和 SpriteKit 中使用 UISwipeGestureRecognizer 而不是 touchesMoved?
SpriteKit touchesMoved 在 SKSpritenode 的子类中使用时不稳定
iPhone UIView touchesMoved: withEvent: 不会在 UIView 上使用手势识别器调用