Ios Apple Watch(WatchKit)中的手势识别

Ios Apple Watch(WatchKit)中的手势识别,ios,objective-c,watchkit,apple-watch,Ios,Objective C,Watchkit,Apple Watch,我正在寻找如何通过WatchKit SDK在Apple Watch应用程序中检测手势。在iOS中,我们可以使用如下代码: - (void)viewDidLoad { ... UISwipeGestureRecognizer *swipeRightBlack = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(slideToRightWithGestureRecognizer:)];

我正在寻找如何通过WatchKit SDK在Apple Watch应用程序中检测手势。在iOS中,我们可以使用如下代码:

- (void)viewDidLoad
{
    ...
    UISwipeGestureRecognizer *swipeRightBlack = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(slideToRightWithGestureRecognizer:)];
    swipeRightBlack.direction = UISwipeGestureRecognizerDirectionRight;
    [self.viewBlack addGestureRecognizer:swipeRightBlack];
}

…但这在Apple Watch模拟器中不起作用。有没有一种方法可以使用WatchKit覆盖默认的手势动作,或者在操作系统接收到它们时识别它们?

据我所知,没有办法做到这一点。整个苹果手表是超级有限的,当谈到你可以用它做什么。我想这是有道理的,因为它应该只是你的主应用程序的外围设备,但对我来说太有限了。

你读过iWatch指南吗?苹果说:

手势:系统代表您处理所有手势,使用它们实现标准行为:

  • 垂直滑动滚动当前屏幕
  • 水平滑动在基于页面的界面中显示上一页或下一页
  • 左边缘滑动导航回父接口控制器
  • 轻敲表示选择或交互。点击由系统处理并报告给WatchKit扩展的操作方法
Apple Watch不支持多指手势,如捏


…摘自苹果iWatch人机界面指南。因此,我认为这种“黑客”行为与iOS中的行为不同。

你还不能这么做。现在的另一个选择是使用屏幕内的按钮来执行刷卡操作

苹果自动为用户提供滑动手势,以在控制器中前后导航,并滚动手表显示的视图。所有这些都不需要第三方开发人员进行任何代码或手势配置。我们所能做的就是在Interface Builder中定义对象的分段和布局,剩下的由操作系统负责

目前,WatchKit中没有直接访问滑动或其他手势或轻触位置的功能,并且没有理由相信在手表发布之前这种功能会发生变化


目前尚不清楚苹果是否愿意在未来实现这一点,或者他们是否永远不会向开发者开放这一点,但他们鼓励开发者通过自己的网站提交增强请求。请务必描述您想要的用例和您试图解决的问题,以及您提出的解决方案,因为他们可能会提供不同的工具来解决您的问题,即使它的方式与我们预期的不同。

我使用的是目前为watchos2编码的Xcode 7.2,对于我的应用程序,我只希望按钮在0.5秒内双击时执行一个方法,如果用户只点击一次,则不会执行该操作。例如:

在我的

#import <WatchKit/WatchKit.h>
#import <Foundation/Foundation.h>

@interface InterfaceController : WKInterfaceController

- (IBAction)btnActivate;
@property (unsafe_unretained, nonatomic) IBOutlet WKInterfaceButton *activateBtn;

@end

当然,您可以调整后延迟等,并清理代码,但这就是我如何能够获得双点击工作的方式,watchOS 3添加了对的第三方支持

苹果公司还更新了他们的手机,加入了一个WKInterfaceController手势示例,演示如何在Apple Watch上使用各种手势

下面是他们代码中的一个片段,显示了脚本中配置的手势的两个动作:

class GestureDetailController : WKInterfaceController {
    @IBOutlet var tapGroup: WKInterfaceGroup!
    @IBOutlet var panGroup: WKInterfaceGroup!

    ...

    @IBAction func tapRecognized(_ sender: AnyObject) {
        tapGroup.setBackgroundColor(UIColor.green())
        scheduleReset()
    }

    @IBAction func panRecognized(_ sender: AnyObject) {
        if let panGesture = sender as? WKPanGestureRecognizer {
            panGroup.setBackgroundColor(UIColor.green())
            panLabel.setText("offset: \(NSStringFromCGPoint(panGesture.translationInObject()))")
            scheduleReset()
        }
    }

2015年将推出完整的应用程序API。目前的支持只是第一步。嗯,正如这里所列出的,只是在官方WatchKit意识到之前寻找黑客或可以提供帮助的人:DApple已经确认“完整的本地应用程序”将在2015年晚些时候提供。我认为我们不能假设API一定会像我们在iOS中拥有的那样。当前的WatchKit API是围绕手表只显示界面的需要而设计的,但这并不意味着即使应用程序以本机方式运行,我们也可以完全访问所有内容。当然,希望如此。时间会证明一切的。一切都在《iWatch指南》中解释了……我们不需要在这里问我在《小iWatch指南》中是否有我想要的:)谢谢!关于长按手势有什么想法吗?@Rajiustalla:第三方应用程序根本无法访问手势。即使是强制触摸手势也只能用于启动屏幕级别的上下文菜单,而那些“自动”的刷卡手势是非常糟糕的。我尝试过的所有应用程序,包括我正在开发的应用程序,每当我使用交互式弹出手势时,其导航堆栈都会出错。一旦你回过头来刷卡,你就不能正确地转到另一个屏幕。
class GestureDetailController : WKInterfaceController {
    @IBOutlet var tapGroup: WKInterfaceGroup!
    @IBOutlet var panGroup: WKInterfaceGroup!

    ...

    @IBAction func tapRecognized(_ sender: AnyObject) {
        tapGroup.setBackgroundColor(UIColor.green())
        scheduleReset()
    }

    @IBAction func panRecognized(_ sender: AnyObject) {
        if let panGesture = sender as? WKPanGestureRecognizer {
            panGroup.setBackgroundColor(UIColor.green())
            panLabel.setText("offset: \(NSStringFromCGPoint(panGesture.translationInObject()))")
            scheduleReset()
        }
    }