1

MKMapViewの上に重ねることができるラベルが付いた単純なグラデーションを作成しようとしています。SO を調べたところ、UIView で drawRect をオーバーライドするのではなく、CAGradientLayer を使用できることがわかりました。やってみようと思いました。私のviewDidLoadでは、これを行います:

CGRect frame = CGRectMake(self.mapView.frame.origin.x, self.mapView.frame.origin.y, 320.0, 44.0);

CAGradientLayer *gradientLayer = [CAGradientLayer layer];
gradientLayer.frame = frame;
gradientLayer.backgroundColor = (__bridge CGColorRef)((__bridge id)([UIColor clearColor].CGColor));
[gradientLayer setCornerRadius:12.0];
[gradientLayer setOpacity:0.5];

gradientLayer.colors = @[(id)[UIColor blackColor].CGColor, (id)[UIColor whiteColor].CGColor];
[self.view.layer addSublayer:gradientLayer];

左上隅と右上隅の下にこの白い部分があることを除いて、それは正しい道にあります。これには理由がありますか?UIViewsで以前に起こったので、レイヤーのbackgroundColorなどを設定しなかったためだと思いましたが、そうではないようです。

ここに画像の説明を入力

ありがとう!

4

3 に答える 3

2

角の下には白がありません。下に地図があります。4 つのコーナーを 600% ズームしたものを次に示します。

ここに画像の説明を入力

レイヤーのコーナー半径を設定すると、そのレイヤーがクリッピングされます。レイヤーの下にあるものはすべて、丸みを帯びたレイヤーを切り取った場所から透けて見えます。

あなたの場合、グラデーション レイヤーの角を切り取ったので、下のマップ レイヤーはグラデーションとブレンドされずに透けて見えます。

マップ レイヤーのコーナーもクリップする必要があります。最も簡単な方法は、マップ レイヤーに同じコーナー半径を設定することです。

于 2012-09-20T06:04:38.347 に答える
0

このヘッダーファイルをインクルードします。

#import <QuartzCore/QuartzCore.h>
#import "QuartzCore/CALayer.h"

次に、radiusを使用します。

gradientLayer.layer.cornerRadius = 7.0; 
于 2012-09-20T06:17:51.367 に答える
0
  1. Add QuartzCore.framework
  2. #import <QuartzCore/QuartzCore.h>
  3. yourView.layer.cornerRadius = 12.0f;
于 2012-09-20T07:14:01.477 に答える