如何在 Swift 中识别 iPhone SHAKE? [复制]

Posted

技术标签:

【中文标题】如何在 Swift 中识别 iPhone SHAKE? [复制]【英文标题】:How to identify iPhone SHAKE in Swift? [duplicate] 【发布时间】:2017-11-23 06:10:46 【问题描述】:

您好,我想在用户摇动手机时识别 iPhone SHAKE,无论是在后台模式还是在应用程序的前台模式。

请帮助我。 提前致谢。

【问题讨论】:

我认为这会有所帮助:***.com/questions/10154958/… @PradeepKashyap 我会检查的。感谢您的快速回复。 参考以下链接***.com/questions/33503531/… 【参考方案1】:

试试这样的:

override func motionBegan(_ motion: UIEventSubtype, with event: UIEvent?) 
    print("Device was shaken!")

【讨论】:

感谢您的快速回复。我会检查的。【参考方案2】:

主要技巧是您需要一些 UIView(不是 UIViewController)作为 firstResponder 来接收震动事件消息。以下是您可以在任何 UIView 中用于获取抖动事件的代码:

class ShakingView: UIView 

override func motionEnded(_ motion: UIEventSubtype, with event: UIEvent?) 
    if event?.subtype == .motionShake 
        // Put in code here to handle shake
    
    if super.responds(to: #selector(UIResponder.motionEnded(_:with:))) 
        super.motionEnded(motion, with: event)
    


override var canBecomeFirstResponder: Bool  return true 

您可以轻松地将任何 UIView(甚至系统视图)转换为可以获取抖动事件的视图,只需使用这些方法对视图进行子类化(然后在 IB 中选择这种新类型而不是基本类型,或者使用它)分配视图时)。

在视图控制器中,您希望将此视图设置为第一响应者:

override func viewWillAppear(_ animated: Bool) 
    shakeView.becomeFirstResponder()
    super.viewWillAppear(animated)


override func viewWillDisappear(_ animated: Bool) 
   shakeView.resignFirstResponder()
   super.viewWillDisappear(animated)

不要忘记,如果您有其他视图成为用户操作的第一响应者(如搜索栏或文本输入字段),您还需要在其他视图退出时恢复抖动视图的第一响应者状态!

即使您将 applicationSupportsShakeToEdit 设置为 NO,此方法也有效。

objective c 版本参考链接How do I detect when someone shakes an iPhone?

【讨论】:

ShakingView 根本不是 UIView @Leo Dabus,这是您可以在任何 UIView 中使用以获取抖动事件的代码 :) ShakingView 它只是一个类而不是 UIView 您在代码中发现错误,无法编辑答案@LeoDabus :) 有很多。你应该在发布之前测试你的代码

以上是关于如何在 Swift 中识别 iPhone SHAKE? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Swift 让 iPhone 振动?

如何识别iphone?

如何在 Swift 中识别强引用循环?

如何在 iPhone 的 Swift iOS 中使用 FBSDK 获取用户电子邮件地址?

你将如何保护用 Swift 制作的 iPhone 应用程序中的文本?

如何在 Swift 中识别 UIImage 数组中的 Tapped UIImage