如何在屏幕上显示所有触摸以演示iPhone应用程序?

时间:2011-07-13 22:55:59

标签: iphone ios uitouch

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

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

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

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

5 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:3)

在查看所有各种图书馆之后,我意识到,至少在我的情况下,他们是大规模的矫枉过正。我只想制作一个App预览视频,我只需要在我的应用中的两个地方使用它。

所以,我花了一点时间想出了以下代码,您可以使用基于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"变量中)。如果您不这样做,那么原始值会丢失,并且在您显示触摸标记后,您的节点测试都不起作用。

希望这有助于其他人!

DIZ

答案 2 :(得分:3)

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

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

https://github.com/KaneCheshire/ShowTime

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

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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