Swift-摇动结束后查找位置

Posted

技术标签:

【中文标题】Swift-摇动结束后查找位置【英文标题】:Swift- Find location after shake motion ends 【发布时间】:2017-03-26 20:28:36 【问题描述】:

我知道如何做摇动手势和如何分别找到位置,但是我不知道用户摇动设备后如何找到位置。我有 xcode 6.4 版。

现在我有一个动作结束功能。还有一个 showUserLocation 函数。 我想在 motionEnded 中添加一个调用 showUserLocation 的语句,以便在用户摇动手机时找到该位置。

override func motionEnded(motion: UIEventSubtype, withEvent event: UIEvent) 

      ?????  

    

// Showing the user location
func showUserLocation(sender : AnyObject) 
    let status = CLLocationManager.authorizationStatus()

    //Asking for authorization to display current location
    if status == CLAuthorizationStatus.NotDetermined 
        locationManager.requestWhenInUseAuthorization()
     else 
        locationManager.startUpdatingLocation()
    

【问题讨论】:

这个问题太宽泛了,答案很简单,虽然可能很难实现,因为在软件开发中几乎总是如此,在手机震动之后,在你的代码中,你知道震动已经发生了,现在找到位置 更具体地说:这些括号中的内容会覆盖 func motionEnded(motion: UIEventSubtype, withEvent event: UIEvent) ????连接到我设置的 showUserLocation 函数 你不能问这样的问题,在 cmets 中发布代码太难,任何人都无法理解并给你答案,括号中是你想要的任何代码,以某种形式或语法,你可以如果在范围内,在正确的线程上可访问,则调用您的函数 Brian,感谢您抽出宝贵时间帮助我解决此问题。我正在寻找更具体的答案。我现在将编辑我的问题,希望能更清楚。 【参考方案1】:

您的问题与摇晃动作结束或呼叫位置无关。您的问题是 Swift 的基本语法和对任何编程语言的一般理解之一。

您用于获取位置的代码实现被“装箱”到一个动作函数中,可能是一个 UIButton touchup,其中需要发送者作为参数。但是您根本不使用 sender 来获取位置信息,因此很容易将此实现移动到它自己的函数 showUserLocationHelper 中,因此动作函数可以调用 getLocation 并且摇动运动可以调用 get location。

你的动作函数的名称:showUserLocation 的名字不好,它应该有一个像 btnShowUserLocationTouchUpInside 这样的名字,一个长的名字,但不会像你命名你的动作函数那样混淆,而不是尝试在 motionEnded 中使用。

override func motionEnded(motion: UIEventSubtype, withEvent event: UIEvent) 
    //you can't pass the sender so couldn't call your showUserLocation action function,
    //so move implementation of showUserLocation to showUserLocationHelper and now you can do what you need after shake event
    showUserLocationHelper()


// Showing the user location
//this is an action function for some UI element like a UIButton and the sender is required to be passed for this function to fire thus, motionEnded cannot directly call it
//but you do not use sender at all
func showUserLocation(sender : AnyObject) 
    showUserLocationHelper()


func showUserLocationHelper() 
    let status = CLLocationManager.authorizationStatus()

    //Asking for authorization to display current location
    if status == CLAuthorizationStatus.NotDetermined 
        locationManager.requestWhenInUseAuthorization()
     else 
        locationManager.startUpdatingLocation()
    

【讨论】:

以上是关于Swift-摇动结束后查找位置的主要内容,如果未能解决你的问题,请参考以下文章

使用 swift 查找 SKNode 的相对 Y 位置

常见算法之二分查找

(查找)找到数组中的指定值得起始和结束位置

JavaFX 中的 TranslateTransition 后节点回到位置(摇动 TextField)

php实现二分查找法

二分法查找(数组)php