2010-10-27 51 views
0

我想嘗試實現一個iPhone項目的視覺輕掃,就像他們在一些遊戲中做的一樣,比如水果忍者。當你在屏幕上拖動手指時,它會留下一段時間後消失的蹤跡。我認爲你可以在「連鎖店」擁有固定數量的積分,並且隨着新的積分被添加到前面,舊的積分將從後面移除。我可以看到使用-touchesMoved來生成新的點和NSMutableArray來跟蹤點。我無法想象我用什麼方法來繪製細分。我會製作一個CALayer並繪製一條連接活動點的線?或者使用其他視圖對象並將它們連接在一起...如何創建和繪製一個視覺輕掃手勢

任何想法?

回答

0

像這樣的東西可以工作,如果你用CGPoint填充'點'。警告:這是一個快速剪切,粘貼和編輯工作 - 所以可能會有錯誤。另外,我使用stl :: vector作爲'points'。您可能想要使用其他結構。

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); 
+0

很酷!那麼這是在'UIView?'的'-drawRect'方法嗎?另外,我不熟悉'stl :: vector' - 是某種結構嗎? – Steve 2010-10-28 03:31:37

+0

是的,沒錯。這將在-drawRect中:.至於stl :: vector <>,它是標準模板庫的一部分,它是C++的一部分。將它包含在Obj-C中會增加更多的設置方面的問題(主要是將.m更改爲.mm並添加一些#include行),但好處很大。例如,stl :: vector <>爲您提供了可變數組,但是它的級別較低,開銷(開銷)要比NSMutableArray少得多(它只能包含NSObject)。 – westsider 2010-10-28 03:50:31

+0

謝謝,@ westsider - 我還沒有完成,但我正在路上。我現在正在使用'CGPoints'的常規C數組。在這一點上,「stl」的東西離我的舒適區太遠了。我可能會嘗試'CFMutableArray' - 我認爲它可以採用'CGPoints',並免費橋接到'NSMutableArray.' – Steve 2010-10-29 02:58:09