【问题标题】:How do I display all touches on screen in order to demo an iPhone app?如何在屏幕上显示所有触摸以演示 iPhone 应用程序?
【发布时间】:2011-07-13 22:55:58
【问题描述】:

现在我们已经在 iPad 2 上进行了显示镜像(现在有线...... iOS 5 中出现了无线),有没有一种简单的方法可以在屏幕上显示所有触摸?这在演示应用时会有用吗?

我正在寻找的是只包含一些 SDK 的能力,并且可能会更改一行代码,之后我的所有触摸都将显示在屏幕上。

我见过许多其他演示应用程序的方法: 1)使用模拟器和屏幕捕获工具,将鼠标光标变成一个大的白色圆圈 2)可以记录屏幕/显示所有触摸的越狱黑客

但是,我的目标是在实际设备上运行的常规应用上显示触摸。

【问题讨论】:

    标签: iphone ios uitouch


    【解决方案1】:

    我意识到这个问题现在已经过时了,但现有的解决方案对我来说都不够好。我需要一些开箱即用的东西,它有多个窗口,而不必对窗口进行子类化或做任何摆弄。

    所以我创建了 ShowTime,它(直到 Swift 4)实际上只需要您将 pod 添加到您的 podfile 或将 ShowTime.swift 添加到您的目标。除非您想配置默认值,否则其余的都是完全自动的。

    https://github.com/KaneCheshire/ShowTime

    从 Swift 4 开始有一个额外的步骤,在您的 AppDelegate 中,只需设置 ShowTime.enabled = .alwaysShowTime.enabled = .debugOnly

    编辑:Swift 4 现在再次自动启用,因此无需手动启用。

    【讨论】:

    【解决方案2】:

    您可以使用 Touchposé:https://github.com/toddreed/Touchpose

    【讨论】:

    • 这很容易做到,并且可以通过#ifdef DEBUG 轻松关闭
    【解决方案3】:

    为此查看了所有不同的库后,我意识到,至少在我的情况下,它们是巨大的矫枉过正。我只是想制作一个应用预览视频,而我的应用中的两个地方只需要它。

    所以,我花了一点时间想出了以下代码,您可以将其与基于 SpriteKit 的场景一起使用,以在逐个场景的基础上启用触摸显示。 (而且,如果您从头开始,您可以继承 SKScene 并将其烘焙以供您的所有场景使用。)

    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
        UITouch *touch = [touches anyObject];
        CGPoint location = [touch locationInNode:self];
        SKNode *node = [self nodeAtPoint:location];
    
    #ifdef weBeRecording
        // ^^ Only do this if we're building a special version for making App Previews
        // Could also be switched on and off by a runtime control, I suppose
    
        // Create a new SKSprite at the touch location
        SKSpriteNode *touchesNode = [SKSpriteNode spriteNodeWithImageNamed:@"touchMarker.png"];
        touchesNode.position = location;
    
        // Initially see-through
        touchesNode.alpha = 0.0;
    
        // Position it above all your other nodes
        touchesNode.zPosition = 199;
    
        // And size it appropriately for your needs
        touchesNode.size = CGSizeMake(80, 80);
    
        // Add it to the scene
        [self addChild:touchesNode];
    
        // And then make it fade in and out. (Adjust in and out times as needed.)
        SKAction *showTouch =
        [SKAction sequence:@[
                             [SKAction fadeInWithDuration:0.25],
                             [SKAction fadeOutWithDuration:0.25],
                             [SKAction removeFromParent]
                             ]];
        [touchesNode runAction:showTouch];
    #endif
    
        /* process original touch on node here */
    }
    

    当然,您必须自己制作 touchMarker.png 文件。我在 Photoshop 中创建了我的,它只是一个简单的 100x100 白色圆圈,透明度为 50%。老实说,获得正确的图像比让代码正常工作需要更长的时间。 (如果有办法在这里附加图片,我会这样做。但是,嗯,这是我的第一天。是的。)

    需要注意的是,在执行此操作之前,您已经找到并保存了最初接触的节点(保存在“node”变量中)。否则,原始值会丢失,并且在您显示触摸标记后,您的任何节点测试都将不起作用。

    希望这对其他人有帮助!

    迪兹

    【讨论】:

      【解决方案4】:

      您必须在容器视图上编写自定义触摸代码,并将圆形视图的中心移动到触摸的 locationInView。

      【讨论】:

        【解决方案5】:

        我可能会尝试使用 touchesBegan、touchesMoved 和 touchesEnded 捕获 KeyWindow 上的所有触摸。然后,您可以在应用程序上放置一个透明视图,然后在适当的位置显示触摸。

        【讨论】:

          【解决方案6】:

          我最近拼凑的另一种解决方案使您可以针对任何应用程序(包括 SpringBoard 和其他 iOS 系统应用程序,即设置),并且需要对您自己的应用程序进行零修改或库,唯一的缺点是它需要越狱。我想我会分享,以防万一其他人觉得它有用。

          https://github.com/lechium/touchy

          我以https://github.com/mapbox/Fingertips 为基础,但注入到 UIWindow 中,而不是替换它,以添加所有必要的东西以使触摸成为可能。

          如果您已越狱但不想自己构建和安装 touchy,请访问我的 Cydia 存储库:https://nitosoft.com/beta2

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-01-14
            • 2015-10-07
            • 1970-01-01
            • 1970-01-01
            • 2016-10-26
            • 2011-12-14
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多