【问题标题】:How to create and draw a visual swipe gesture如何创建和绘制视觉滑动手势
【发布时间】:2010-10-27 23:44:20
【问题描述】:

我想尝试为 iPhone 项目实现视觉滑动,就像他们在某些游戏(如 Fruit Ninja)中所做的那样。当您在屏幕上拖动手指时,它会留下一条痕迹,一段时间后就会消失。我认为您可以在“链”中拥有固定数量的点,并且随着新点添加到前面,旧点会从后面移除。我可以看到使用-touchesMoved 生成新点并使用NSMutableArray 来跟踪点。我只是无法想象我将使用什么方法来实际绘制这些片段。我会做一个CALayer 并画一条连接活动点的线吗?或者使用其他一些视图对象并将它们连接在一起......

有什么想法吗?

【问题讨论】:

    标签: iphone ios gestures swipe touches


    【解决方案1】:

    如果你用 CGPoints 填充了“点”,这样的事情会起作用。警告:这是一项快速剪切、粘贴和编辑工作 - 因此可能会出现错误。另外,我将 stl::vector 用于“点”。您可能想要使用其他结构。

    CGContextRef context = UIGraphicsGetCurrentContext();
    CGMutablePathRef dataPath = CGPathCreateMutable();
    bool firstPoint = YES;
    
    for (int i=0; i < points.size(); ++i)
        {
        CGPoint point = points[i];
        if (firstPoint)
            {
            CGPathMoveToPoint(dataPath, NULL, point.x, point.y);
            firstPoint = NO;
            }
        else
            {
            CGPathAddLineToPoint(dataPath, NULL, point.x, point.y);
            }
        }
    
    CGContextSetRGBStrokeColor( context, 1.0, 0.0, 0.0, 1.0);
    CGContextSetLineWidth( context, 5);
    CGContextBeginPath( context );
    CGContextAddPath( context, dataPath );
    CGContextDrawPath( context, kCGPathStroke);
    
    CGPathRelease(dataPath);
    

    【讨论】:

    • 酷!那么这是在UIView?-drawRect 方法中吗?另外,我不熟悉stl::vector - 这是某种结构吗?
    • 是的,没错。它会在 -drawRect: 中。至于 stl::vector,它是标准模板库的一部分,也是 C++ 的一部分。将它包含在 Obj-C 中会增加一些设置方面的问题(主要是将 .m 更改为 .mm 并添加几行 #include 行),但好处是显着的。例如,stl::vector 为您提供了可变数组,但与 NSMutableArray 相比,它的级别较低且开销(费用)要少得多——后者只能包含 NSObject。
    • 谢谢,@westsider - 我还没有完成,但我正在路上。我现在正在使用 CGPoints 的常规 C 数组。在这一点上,stl 的东西离我的舒适区太远了。我可能会尝试CFMutableArray - 我认为它可能会占用CGPoints, 并且可以免费连接到NSMutableArray.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多