如何使用Swift(XCTest)生成摇动手势

5

我正在使用Swift和XCTest编写我的应用程序的UI测试,我必须摇动设备才能收到通知,请问如何在代码中生成摇动手势。


你找到解决方案了吗? - almas
4个回答

1

这个解决方案非常简单。你只需要发送 "com.apple.UIKit.SimulatorShake" 的 Darwin 通知即可。请看下面的示例代码:

SimulatorShaker.h

#import <Foundation/Foundation.h>

@interface SimulatorShaker : NSObject

+ (void)performShake;

@end

SimulatorShaker.m

#import "SimulatorShaker.h"
#import "notify.h"

@implementation SimulatorShaker

+ (void)performShake {
    notify_post("com.apple.UIKit.SimulatorShake");
}

@end

如果您在使用Swift项目时需要添加桥接头文件。通常情况下,当您向项目中添加一些Objective-C文件时,Xcode会建议自动创建桥接头文件。如需了解如何手动设置标题,请参见此处。如果您找不到桥接头文件或构建项目时遇到任何问题,请手动设置。 注意:达尔文通知API是第三方开发人员的私有内容,苹果不允许发布此类代码到应用商店。但是,如果您仅将其用于UI测试目的,则不会遇到任何问题。

你可以使用Darwin通知来做许多其他酷炫的事情。你可以在这里这里查看一些已知的通知标识符。 - Ostap4ik

-1

目前在使用XCUITest时还不支持摇晃手势。如果可以的话,我建议您采用一种解决方法(例如双指轻敲?),或者使用像Appium这样支持摇晃手势的工具。


-1

Swift 3

override var canBecomeFirstResponder: Bool {
    return true
}

override func motionEnded(_ motion: UIEventSubtype, with event: UIEvent?) {
    if motion == .motionShake {
        print("Shaked")
    }
}

1
这是如何处理摇晃手势,而不是执行它。 - Reedy

-2
首先,您应该将以下方法添加到您的UIViewController子类中:
override func canBecomeFirstResponder() -> Bool {
    return true
}

接下来是添加motionEnded:withEvent:方法:
override func motionEnded(motion: UIEventSubtype, withEvent event: UIEvent?) {
    if motion == .MotionShake {
      print("Shaked")
    }
}

祝你好运 :)


1
我在 Swift 2.* 中不需要使用 canBecomeFirstResponder() 委托。 - Nathaniel
1
这并没有回答如何从代码/测试生成摇晃手势的问题。 - almas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接