Iphone 透明度/Alpha和MKOverlayView问题
在与MkOverlayView和MKMapKit的许多问题搏斗之后,我发现自己又遇到了一个问题。我正在使用一个MKOverlayPathView子类在屏幕上绘制一个奇异的大覆盖图,它现在覆盖了伦敦。为了便于讨论,覆盖层内有许多彩色正方形:Iphone 透明度/Alpha和MKOverlayView问题,iphone,ios,mkmapview,alpha,mkoverlay,Iphone,Ios,Mkmapview,Alpha,Mkoverlay,在与MkOverlayView和MKMapKit的许多问题搏斗之后,我发现自己又遇到了一个问题。我正在使用一个MKOverlayPathView子类在屏幕上绘制一个奇异的大覆盖图,它现在覆盖了伦敦。为了便于讨论,覆盖层内有许多彩色正方形: - (void)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale inContext:(CGContextRef)context {
- (void)drawMapRect:(MKMapRect)mapRect
zoomScale:(MKZoomScale)zoomScale
inContext:(CGContextRef)context
{
int size = 0;
min = 0;
max = 0;
CGFloat alpha = 0.4f;
int recursionLevel = 4;
QuadNodeOverlay *quadNodeOverlay = (QuadNodeOverlay *)self.overlay;
Cluster *clusters = quadtree_clusters(quadNodeOverlay.quadTree, recursionLevel, &size);
if (clusteringMethod == 1) {
/* Draw paths/squares */
CGPathRef *paths = [self createPaths:clusters size:size];
for (int i = 0; i < size; i++) {
CGPathRef path = paths[i];
Cluster cluster = clusters[i];
CGContextBeginPath(context);
CGContextAddPath(context, path);
//CGContextSetFillColorWithColor(context, colors[cluster.depth]);
CGColorRef gradientColor = [self newColor:cluster.count];
CGContextSetFillColorWithColor(context, gradientColor);
CGContextDrawPath(context, kCGPathFillStroke);
CGColorRelease(gradientColor);
CGPathRelease(path);
}
free(paths);
} else if (clusteringMethod == 2) {
// CUT
}
[self setAlpha:alpha];
}
这段代码同样适用于我现在的目的。问题在于,当我放大到某个级别时,簇不会显示,但当我缩小时,单个注释会显示。覆盖的一部分在没有透明度的情况下渲染。可视信息:
作为一个音符。从覆盖中删除setAlpha并修改绘制要读取的正方形的代码:
CGColorRef gradientColor = [self newColor:cluster.count];
CGColorRef alphaGradientColor = CGColorCreateCopyWithAlpha(gradientColor, alpha);
CGContextSetFillColorWithColor(context, alphaGradientColor);
解决了这个问题,但是将alpha通道作为一个整体应用于覆盖层肯定更有效。请发布解决方案(如果可用)。这有点倒退,我将尝试找出我最终得到的结果,并将其作为答案发布。可能需要一到两天的时间。如果可以的话,请发布解决方案。这有点倒退,我会尝试找出我最终得到的结果,并将其作为答案发布。可能要花我一两天时间。
CGColorRef gradientColor = [self newColor:cluster.count];
CGColorRef alphaGradientColor = CGColorCreateCopyWithAlpha(gradientColor, alpha);
CGContextSetFillColorWithColor(context, alphaGradientColor);