iphone - Можете ли вы добавить изображение, созданное телефоном, в MKOverlay? - PullRequest
0 голосов
/ 24 февраля 2012

Я следил за Сессией WWDC 127 - Настройка карт с наложениями.Они говорят, что вы можете получить изображение для использования в качестве MKOverlay либо из пакета приложений, либо из сети.Я хотел бы знать, может ли изображение генерироваться телефоном с помощью его API.

Кто-нибудь делал это?Можете ли вы предоставить учебник?

Спасибо.

[РЕДАКТИРОВАТЬ] Мне также понадобится учебник о том, как добавить это изображение, созданное телефоном или загруженное из сети, вкарта.Все, что я вижу, это демонстрация WWDC, но вам нужен билет на конференцию, которого у меня явно нет.

1 Ответ

1 голос
/ 24 февраля 2012

Вот код для рисования с использованием Quartz в UIImage.Надеюсь, что это полезно, и вы можете получить идею

void mainFunction() {
    // background size
    CGSize sizeBack = CGSizeMake(layerFrame.size.width*scaledFactor,layerFrame.size.height*scaledFactor);
    UIGraphicsBeginImageContext(sizeBack);
    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextSetRGBFillColor(context, 0., 0., 0., 1.);
    drawBorder(context, scaledRect);

    UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    if (destinationLayer) {
       [destinationLayer setContents:(id)img.CGImage];
    }
}

CGPathRef createRoundedRectanglePath(CGRect mainRect, CGFloat roundRatio) {

    roundRatio = fabs(roundRatio);
    roundRatio = MIN(1, roundRatio);
    CGFloat offset = roundRatio * MIN(mainRect.size.width, mainRect.size.height)/2;

    CGPoint c1 = CGPointMake(0,0);
    CGPoint c2 = CGPointMake(mainRect.size.width,0);
    CGPoint c3 = CGPointMake(mainRect.size.width,mainRect.size.height);
    CGPoint c4 = CGPointMake(0,mainRect.size.height);

    CGPoint pA = CGPointMake(c1.x + offset, c1.y);
    CGPoint pB = CGPointMake(c2.x - offset, c2.y);
    CGPoint pC = CGPointMake(c2.x, c2.y + offset);
    CGPoint pD = CGPointMake(c3.x, c3.y - offset);
    CGPoint pE = CGPointMake(c3.x - offset, c3.y);
    CGPoint pF = CGPointMake(c4.x + offset, c4.y);
    CGPoint pG = CGPointMake(c4.x, c4.y - offset);
    CGPoint pH = CGPointMake(c1.x, c1.y + offset);


    CGMutablePathRef result = CGPathCreateMutable();
    CGPathMoveToPoint(result, NULL, pA.x, pA.y);

    CGPathAddLineToPoint(result, NULL, pB.x, pB.y);
    CGPathAddQuadCurveToPoint(result, NULL, c2.x, c2.y, pC.x, pC.y);

    CGPathAddLineToPoint(result, NULL, pD.x, pD.y);
    CGPathAddQuadCurveToPoint(result, NULL, c3.x, c3.y, pE.x, pE.y);

    CGPathAddLineToPoint(result, NULL, pF.x, pF.y);
    CGPathAddQuadCurveToPoint(result, NULL, c4.x, c4.y, pG.x, pG.y);

    CGPathAddLineToPoint(result, NULL, pH.x, pH.y);
    CGPathAddQuadCurveToPoint(result, NULL, c1.x, c1.y, pA.x, pA.y);

    CGPathCloseSubpath(result);

    CGPathRef path = CGPathCreateCopy(result);
    CGPathRelease(result);
    return path;
}

void drawBorder(CGContextRef context, CGRect rect) {
    CGContextSaveGState(context);
    /* Outside Path */
    CGPathRef thePath = createRoundedRectanglePath(rect, 0.2);

    /* Fill with Gradient Color */
    CGFloat locations[] = { 0.0, 1.0 };
    CGColorRef startColor = [UIColor colorWithRed:1.
                                            green:1.
                                             blue:1.
                                            alpha:1.].CGColor;
    CGColorRef endColor = [UIColor colorWithRed:208./255.                                          
                                          green:208./255.
                                           blue:208./255.
                                          alpha:1.].CGColor;


    NSArray *colors = [NSArray arrayWithObjects:(id)startColor, (id)endColor, nil];

    CGPoint startPoint = CGPointMake(CGRectGetMidX(rect), 0);
    CGPoint endPoint = CGPointMake(CGRectGetMidX(rect), rect.size.height);

    CGContextAddPath(context, thePath);
    CGContextClip(context);
    drawLinearGradient(context, startPoint, endPoint, locations, (CFArrayRef*)colors);

    /* Stroke path */
    CGPathRelease(thePath);
    thePath = createRoundedRectanglePath(rect, 0.2);
    CGContextSetStrokeColor(context, CGColorGetComponents([UIColor colorWithRed:0 green:0 blue:1. alpha:1.].CGColor));
    CGContextAddPath(context, thePath);
    CGContextSetLineWidth(context, 1.);
    CGContextDrawPath(context, kCGPathStroke);
    CGContextRestoreGState(context);
    CGPathRelease(thePath);
}
...