1

私は CGContextDrawLinearGradient を試していて、始点と終点が何を意味するのかひどく混乱していますか? 現在の CGContext の座標を意味すると思ったので、始点を 0,0 に、終点を 100,100 に定義すると、グラデーションのある正方形が得られます。私は自分の座標に接続できない別のものを完全に取得します。

これは私が持っているコードです:

- (void)drawRect:(CGRect)rect {
// Drawing code 
CGContextRef current_context = UIGraphicsGetCurrentContext();
CGContextSaveGState(current_context);

// Gradient
CGFloat locations[3] = {0.0, 0.5, 1.0};
CGFloat components[12] = {1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0};
CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB();
CGGradientRef gradient = CGGradientCreateWithColorComponents(colorspace, components, locations, 3);
CGPoint startPoint = CGPointMake(0, 0);
CGPoint endPoint = CGPointMake(40, 40);
CGContextDrawLinearGradient(current_context, gradient, startPoint, endPoint, 0);


// Shadow
CGContextSetShadow(current_context, CGSizeMake(4,7), 1.0);

// Image
UIImage *logoImage = [UIImage imageNamed:@"logo.png"];
[logoImage drawInRect:bounds];
CGContextRestoreGState(current_context);

}

事前にご協力いただきありがとうございます..

4

2 に答える 2

4

コードの大部分は問題ありません。問題は次の行で発生します。

CGPoint startPoint = CGPointMake(0, 0);
CGPoint endPoint = CGPointMake(40, 40);
CGContextDrawLinearGradient(current_context, gradient, startPoint, endPoint, 0);

CGContextDrawLinearGradientは、始点と終点を取得することを想定しています (正方形の 2 つの対角線ではなく、線を定義します!)。

グラデーションは、この制御線に垂直な色付きの線で描画されます。描画は、開始色 (位置 0 の色) を使用して、startPoint を通る線 (startPoint と endPoint の間の線に垂直) から始まります。次の線は、endPoint に近い '1 ピクセル' の点を通って描画されます。色は、開始点と終了点の間、または次の色 (色の位置の数によって異なります) と計算されます。最後に、終了色を使用して、endPoint を通る線が (再び垂直に...) 描画されます。

正方形の代わりに (制御) 線を使用する利点は、グラデーションを任意の方向に描画できることです。水平、垂直、その間のどこかで、指定された線の方向のみに依存します。

サンプルコードでは、線が x 軸に対して 45° の角度を持っているため、グラデーションは斜めにする必要があります :-)。

于 2015-09-18T05:35:40.040 に答える