2011-01-24 16 views
8

私は、線を描くことができるときにアプリを開発したいと思いますが、直線を描きたいとは思っていませんが、ユーザが描画するときに線を表示したいと思います。ユーザーがポイントAからBになると、私はラインをまっすぐにしたい(ユーザーがこれを望むならば)。iPhone/iPadで線を描く

これを行うには、0,0(左上)から320,480(iPhoneの場合)および768,1024(iPadの場合)(右下)のグリッドに変更したいと考えています。

この質問では、ポイントAが10,10、ポイントBが100,100です。

私の質問:
- このグリッドを作成するにはどうすればよいですか?
- これらのポイントを作成するにはどうすればよいですか?
- どのように整列させずにこの線を描くのですか?
- 直線を描くにはどうすればよいですか?

私の問題は、「普通の」UIアプリケーションの作成に慣れていることです。私はOpen-GLのectに精通していません。

私は誰かがこれを手伝ってくれることを願っています。

敬具、
ポールPeelen

+0

「修正」問題を別の質問にすることをおすすめします。 – genpfault

+0

あなたはステップ1として直線で始まり、その後ステップ2で直線ではない直線に行くことを意味しますか? –

+0

これを 'opengl-es'とタグ付けしました。それを使って、あるいは"ネイティブ "描画システム、Quartzを使って描画していますか? –

答えて

17

あなたのUIViewをサブクラス化し、- (void)drawRect:(CGRect)rectメソッドをオーバーライドします。

があるでは、グラフィックスコンテキストつかむ:

CGContextRef context = UIGraphicsGetCurrentContext(); 

をそして、あなたはそれを作るために使用するコアグラフィックスは次のように、呼び出します。

CGContextRef context = UIGraphicsGetCurrentContext(); 
CGContextBeginPath (context); 
for (k = 0; k < count; k += 2) { 
    CGContextMoveToPoint(context, s[k].x, s[k].y); 
    CGContextAddLineToPoint(context, s[k+1].x, s[k+1].y); 
} 
CGContextStrokePath(context); 

すべての詳細については、クォーツ2Dプログラミングガイドを検索します。

+0

素晴らしいです、私は見てみましょう。 –

+0

私は同じこと、どの例やチュートリアルでも起動しています...このコードの使い方を理解できません。ありがとうございました – Dave

+0

上記のコードの使い方を教えてください。 –

0

ユーザードラッグそれはポイントがUIBezierPathとCAShapeLayerを使用して線を描画開始と終了に基づくときは、直線をドラッグすることができます。これは、あなたの目標を達成するのに役立ちます

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [[event allTouches] anyObject]; 
    startingPoint = [touch locationInView:baseHolderView]; 

} 
- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [touches anyObject]; 
    endingPoint = [touch locationInView:baseHolderView]; 
    [self makeLineLayer:baseHolderView.layer lineFromPointA:startingPoint toPointB:endingPoint]; 
} 

-(void)makeLineLayer:(CALayer *)layer lineFromPointA:(CGPoint)pointA toPointB:(CGPoint)pointB 
{ 
    CAShapeLayer *line = [CAShapeLayer layer]; 
    UIBezierPath *linePath=[UIBezierPath bezierPath]; 
    [linePath moveToPoint: pointA]; 
    [linePath addLineToPoint:pointB]; 
    line.path=linePath.CGPath; 
    line.fillColor = nil; 
    line.opacity = 2.0; 
    line.strokeColor = [UIColor blackColor].CGColor; 
    [layer addSublayer:line]; 
} 

希望を。