そのようです:
これは では機能しないことはわかっていますがNSShadow
、描画しても問題なく機能しdrawRect:
ます。
そのようです:
これは では機能しないことはわかっていますがNSShadow
、描画しても問題なく機能しdrawRect:
ます。
完璧にはほど遠いですが、あなたが探しているような影を描いていると思います. 完全な黒からクリアな色への単純な線形グラデーションをそのままにしてあることに注意してください. 非常に暗いため、値を少し調整しない限り、超リアルな影は得られません。さまざまなアルファ値を持つ場所をさらに追加して、グラデーションを操作して、好きなステップを取得したい場合があります。いくつかの実験が必要になるかもしれませんが、値はすべて揃っています。
あなたの提案によると、それはdrawRect:(CGRect)rect
事です。カスタム ビューを作成し、それをオーバーライドするだけです。
- (void)drawRect:(CGRect)rect {
// Get the context
CGContextRef context = UIGraphicsGetCurrentContext();
// Setup the gradient locations. We just want 0 and 1 as in the start and end of the gradient.
CGFloat locations[2] = { 0.0, 1.0 };
// Setup the two colors for the locations. A plain black and a plain black with alpha 0.0 ;-)
CGFloat colors[8] = { 0.0f, 0.0f, 0.0f, 1.0f, // Start color
0.0f, 0.0f, 0.0f, 0.0f }; // End color
// Build the gradient
CGGradientRef gradient = CGGradientCreateWithColorComponents(CGColorSpaceCreateDeviceRGB(),
colors,
locations,
2);
// Load a transformation matrix that will squash the gradient in the current context
CGContextScaleCTM(context,1.0f,0.1f);
// Draw the gradient
CGContextDrawRadialGradient(context, // The context
gradient, // The gradient
CGPointMake(self.bounds.size.width/2,0.0f), // Starting point
0.0f, // Starting redius
CGPointMake(self.bounds.size.width/2,0.0f), // Ending point
self.bounds.size.width/2, // Ending radius
kCGGradientDrawsBeforeStartLocation); // Options
// Release it an pray that everything was well written
CGGradientRelease(gradient);
}
私の画面ではこんな感じ…
影のすぐ上に画像を配置しただけですが、UIImageView をサブクラス化して drawRect メソッドをオーバーライドすると、影を画像と簡単にマージできます。
ご覧のとおり、私が行ったことは単純に円形グラデーションを設定することでしたが、コンテキストに描画する前にそれを押しつぶすためにスケーリング マトリックスをロードしました。そのメソッドで何か他のことをする予定がある場合は、マトリックスが配置されており、実行するすべてがマトリックスによって変形されることを覚えておいてください。マトリックスをロードする前に CTM を保存してからCGContextSaveGState()
、元の状態に戻すことができます。CGContextRestoreGState()
これがあなたが探していたものであることを願っています。
乾杯。
コードでこれを行う方法、またはこのコードを生成するツールの使用方法を説明できます。私は後者を選びます。
PaintCodeを使用します(無料のデモが利用可能、セッションごとに 1 時間の制限があります)。
満足するまでグラデーションを調整します。