Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift同时检测屏幕左右两侧的触摸_Ios_Swift_Touches - Fatal编程技术网

Ios Swift同时检测屏幕左右两侧的触摸

Ios Swift同时检测屏幕左右两侧的触摸,ios,swift,touches,Ios,Swift,Touches,我能够检测用户是否触摸屏幕的左侧或右侧,然后执行一项功能。我试图检测屏幕的两侧是否同时被触摸,如果是,则执行另一个功能 这就是我所拥有的,当屏幕两侧同时被触摸时,它就不起作用了 这在更新函数中 if (touched) { var isRight : Bool = false var isLeft : Bool = false if(location.x < 0){ isLeft = true moveLef

我能够检测用户是否触摸屏幕的左侧或右侧,然后执行一项功能。我试图检测屏幕的两侧是否同时被触摸,如果是,则执行另一个功能

这就是我所拥有的,当屏幕两侧同时被触摸时,它就不起作用了

这在更新函数中

if (touched) {
        var isRight : Bool = false
        var isLeft : Bool = false

        if(location.x < 0){
        isLeft = true
        moveLeft()
        }
        else if(location.x > 0){
        isRight = true
        moveRight()


            }
        else if (isRight && isLeft){
            moveUp()


        }

    }
if(触摸){
var isRight:Bool=false
var isLeft:Bool=false
如果(位置x<0){
isLeft=true
左移()
}
如果(location.x>0),则为else{
isRight=true
moveRight()
}
else if(islight和isLeft){
上移
}
}

我没有时间写代码(我现在在打电话-如果你把所有功能都发布出来会有帮助)。基本上,您应该获得一个触摸数组作为参数。然后遍历它们并启用标志:右/左侧触摸。然后根据标记调用函数使用此函数获取触摸位置数组,以测试其位置是否正确(左和右)

override func touchsbegind(touch:Set,带有事件:UIEvent?){
if.count==2{
//2次触球,我们得到2个位置
让tch_1=touchs[touchs.startIndex]。位置(在:self.view中)
让tch_2=touchs[touchs.endIndex]。位置(在:self.view中)
如果(tch_1.x=self.view.frame.size.width/2)|(tch_2.x=self.view.frame.size.width/2){
//同时在屏幕的左侧和右侧检测到触摸
}
}
}

以下内容检查触摸侧的所有触摸,并将union值构建为整数值,然后可以使用开关语句检查该整数值:

struct Sides : OptionSet {
    let rawValue: Int

    static let left = Sides(rawValue:1)
    static let right = Sides(rawValue:2)

    static let both : Sides = [.left, .right]
    static let none : Sides = []
}

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    // Get sides touched
    let touched = touches.map { return $0.location(in: view) }.reduce(Sides.none) {
        if $1.x < 0 {
            return [ $0, Sides.left ]
        }
        else if $1.x > 0 {
            return [ $0, Sides.right ]
        }
        else {
            return $0
        }
    }

    switch(touched) {
    case Sides.left:
        // handle left
        break

    case Sides.right:
        // handle right
        break

    case Sides.both:
        // handle both
        break

    case Sides.none:
        fallthrough

    default:
        // none
        break

    }
}
struct-Sides:OptionSet{
让rawValue:Int
静态let左=边(原始值:1)
静态let right=边(原始值:2)
静态让双方:双方=[.left、.right]
静态let none:Sides=[]
}
覆盖func TouchesBegind(Touchs:Set,带有事件:UIEvent?){
//靠边站
let touch=touchs.map{return$0.location(in:view)}.reduce(Sides.none){
如果$1.x<0{
返回[$0,侧边。左]
}
否则,如果$1.x>0{
返回[$0,左右]
}
否则{
返回$0
}
}
开关(触摸式){
案例侧。左:
//左把手
打破
案例侧。右侧:
//正确处理
打破
案件双方:
//兼得
打破
案件双方。无:
失败
违约:
//没有
打破
}
}

给我吗?这是一个非常令人困惑的触摸动作。(我猜对于非开发人员来说,情况更糟。)你能解释一下你想检测它的原因吗?就我个人而言,我会选择另一种姿态。但无论如何,也许你可以用捏手势来检测用户手上的每个数字在哪里?(是的,我认为这是一个非常糟糕的设计姿势。)基本上是触摸屏幕的左侧移动左。。。触摸屏幕右侧向右移动。触摸左右然后发射物体。这是游戏触摸吗?我的两个建议:(1)就像我说的,试着做一个捏手势(或者用touchesbeated和touchesend更深一点——同时检测两次触摸)。(2) 在每一面都放上一层@Yitschak有一个答案可能会有所帮助。该函数只需将一个精灵节点从播放器发送到屏幕顶部即可。就像向上发射一颗子弹。我想不出除了用定时器自动射击之外还有什么别的办法。我认为接触双方都是一个很好的方法,我不明白为什么-1。我写了一个很好的答案,(2年前!)只是没有写代码,但正如我所说,他得到了一系列的触摸作为参数,这是解决问题的关键。重复他们,并了解他是否只有左,只有右或两者!!我认为
side
作为
OptionSet
实现可能更好。这只是返回“Right”?没错@BallpointBen,我当时没能想出
optistation
)@AlexIngram这可能是因为我复制了你的左/右检测代码,将位置与零进行比较。它应该与David进行什么比较?我尝试了>self.frame.midX,但没有成功
struct Sides : OptionSet {
    let rawValue: Int

    static let left = Sides(rawValue:1)
    static let right = Sides(rawValue:2)

    static let both : Sides = [.left, .right]
    static let none : Sides = []
}

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    // Get sides touched
    let touched = touches.map { return $0.location(in: view) }.reduce(Sides.none) {
        if $1.x < 0 {
            return [ $0, Sides.left ]
        }
        else if $1.x > 0 {
            return [ $0, Sides.right ]
        }
        else {
            return $0
        }
    }

    switch(touched) {
    case Sides.left:
        // handle left
        break

    case Sides.right:
        // handle right
        break

    case Sides.both:
        // handle both
        break

    case Sides.none:
        fallthrough

    default:
        // none
        break

    }
}