2016-11-15 11 views
0

区切り線を描画する必要があります。私はセパレータの画像を含めるのではなく、drawメソッドを使ってこれを行うことにしました。セパレータが時折変わるので、パフォーマンスとカスタマイズ性のためにこれを行います。UIViewまたはGLKViewで描画しますか?

UIViewdraw()メソッドを調べましたが、AppleがOpenGLを使用して描画するときにAppleがGLKViewを使用するように提案していることに気付きました。

単純なセパレータの場合、OpenGLを呼び出すのは面倒ではありませんか?あるいは、OpenGLのオーバーヘッドは無視できますか?いついつネイティブUIKit draw()を使用したいですか?

私はいずれの方法も知らないが、両方の方法を学びたいので、「あなたがよく知っているもの」と答えないでください。私は単にパフォーマンスについて質問しています。

+0

何を描きたいのですか? – User511

+0

あなたはiOSの通常のアプリやiOSのゲームにこれを使用しますか? – KrishnaCA

+0

@KrishnaChaitanyaAmjuri iOSアプリ、ゲームではありません。 – vrwim

答えて

1

OpenGLは計算の代わりにCPUの代わりにGPUを使用します。ゲームアプリケーションのようなものを作っているのであれば、OpenGLを使うことが考えられます。私はあなたがiOS Appにラインを描きたいと思う。そのためには、UIViewでdrawRectメソッドを使用するか、shapeLayerを作成してサブレイヤとして追加することができます。

次の例

はあなたが表示されます:

CAShapeLayer *simpleLine = [CAShapeLayer layer]; 
UIBezierPath *path = [UIBezierPath bezierPath]; 
[path moveToPoint:CGPointMake(0, 80)]; 
[path addLineToPoint:CGPointMake(300, 80)]; 
simpleLine.lineWidth = 1.0; 
simpleLine.path = path.CGPath; 
simpleLine.strokeColor = [[UIColor blackColor] CGColor]; 
[[self.view layer] addSublayer:simpleLine]; 

drawRectを使用するために、あなたは上記の方法とは対照的に、カスタムUIViewの内部でこれを行うことになっています。

- (void)drawRect:(CGRect)rect { 
    UIBezierPath *path = [UIBezierPath bezierPath]; 
    [path moveToPoint:CGPointMake(0, 80)]; 
    [path addLineToPoint:CGPointMake(300, 80)]; 
    path.lineWidth = 1.0; 
    [[UIColor blueColor] setStroke]; 
    [path stroke]; 
} 

もしあなたのセパレーターパラメータの変更やアプリを作っているならば、それはdrawRectメソッドを使用することをお勧めします。あなたは何を求めていることはラインオーバー円である[CustomUIView setNeedsDisplay:YES]

編集

を使用することにより、いつでもこのメソッドを呼び出すことができます。最初にlineのためにUIBezierPathを描き、その後、circleのためにUIBezierPathを追加することによってそれを行うことができます。

+0

単純な行のGLKViewではなく、UIViewでdrawメソッドを使用することをお勧めしますか? – vrwim

+1

GLKViewはOpenGLを使用しています。 Open Graphics Library(OpenGL)は、2Dおよび3Dデータを視覚化するために使用されます。これは、2Dおよび3Dデジタルコンテンツの作成、機械設計、建築設計、バーチャルプロトタイピング、フライトシミュレーション、ビデオゲームなどのアプリケーションをサポートする多目的のオープンスタンダードグラフィックスライブラリです。シンプルなアプリケーションを作成しようとしているのであれば、その中の単純な行のために、GPUを使用する必要はありません。それがゲームの場合、それは異なっている – KrishnaCA

+0

私はこの行にどのように円を描くでしょうか? – vrwim

0

法線

UIBezierPath *path = [UIBezierPath bezierPath]; 
[path moveToPoint:CGPointMake(10.0, 10.0)]; 
[path addLineToPoint:CGPointMake(100.0, 100.0)]; 
CAShapeLayer *shapeLayer = [CAShapeLayer layer]; 
shapeLayer.path = [path CGPath]; 
shapeLayer.strokeColor = [[UIColor redColor] CGColor]; 
shapeLayer.lineWidth = 3.0; 
shapeLayer.fillColor = [[UIColor clearColor] CGColor]; 
[self.view.layer addSublayer:shapeLayer]; 

点線は

UIBezierPath *path = [UIBezierPath bezierPath]; 
[path moveToPoint:CGPointMake(10.0, 10.0)]; 
[path addLineToPoint:CGPointMake(100.0, 100.0)]; 
CAShapeLayer *shapeLayer = [CAShapeLayer layer]; 
shapeLayer.path = [path CGPath]; 
shapeLayer.strokeColor = [[UIColor redColor] CGColor]; 
shapeLayer.lineWidth = 3.0; 
shapeLayer.fillColor = [[UIColor clearColor] CGColor]; 
shapeLayer.lineDashPattern = @[@4, @2]; 
[self.view.layer addSublayer:shapeLayer]; 
+0

それはあなたのために働いていますか? – User511

関連する問題