1

我正在尝试创建一个带有标签的简单渐变,我可以将其覆盖在 MKMapView 之上。我查看了 SO,发现我可以使用 CAGradientLayer 而不是覆盖 UIView 中的 drawRect。我想我会试一试。在我的 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 上发生过这种情况,但看起来不像。

在此处输入图像描述

谢谢!

4

3 回答 3

2

角落下面没有白色。他们在下面有地图。这是四个角,放大 600%:

在此处输入图像描述

当您设置图层的角半径时,您正在剪裁该图层。图层下方的任何内容都将通过您将圆形图层剪掉的位置显示出来。

在您的情况下,您已经剪掉了渐变图层的角,因此下面的地图图层会显示出来,而不会与渐变混合。

您还需要剪裁地图图层的角落。最简单的方法是在地图图层上设置相同的角半径。

于 2012-09-20T06:04:38.347 回答
0

你包括这个头文件...

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

然后使用半径。

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