Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 透明度/Alpha和MKOverlayView问题_Iphone_Ios_Mkmapview_Alpha_Mkoverlay - Fatal编程技术网

Iphone 透明度/Alpha和MKOverlayView问题

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 {

在与MkOverlayView和MKMapKit的许多问题搏斗之后,我发现自己又遇到了一个问题。我正在使用一个MKOverlayPathView子类在屏幕上绘制一个奇异的大覆盖图,它现在覆盖了伦敦。为了便于讨论,覆盖层内有许多彩色正方形:

- (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);