Map Popup Window

Description: a custom map popup window.

The CustomMapBubblePopoverView.h File

#import <MapCharting/MapCharting.h>
@interface CustomMapBubblePopoverView : MapBubblePopoverView
@end

The CustomMapBubblePopoverView.m File

#import "CustomMapBubblePopoverView.h"
@implementation CustomMapBubblePopoverView
// Initializes popup window
- (id)init
{
    self = [super init];
    if (self) {
        self.backgroundColor = [UIColor clearColor];
        self.contentMode = UIViewContentModeRedraw;
    }
    return self;
}
- (void)drawRect:(CGRect)rect
{
    // Get current graphic context
    CGContextRef context = UIGraphicsGetCurrentContext();
    // Draw popup window
    [self drawInContext:context boundsRect:[self bounds]];
}
// Draws popup window
- (void) drawInContext: (CGContextRef) context boundsRect: (CGRect) boundsRect
{
    MapPlaced *placed = [self placed];
    // Create a popup window
    CGPathRef path = createBubble(
    CGRectMake(0.5,0.5, boundsRect.size.width-1,
    boundsRect.size.height-1),
    [placed borderRadius],
    0.5,
    14, 11,
    [self arrowOrientation]);
    CGContextSetAlpha(context, 1.0);
    // Set fill
    [[placed background] applyToContext:context path:path rect:boundsRect];
    CGContextSetAlpha(context, 1.0);
    CGContextSetStrokeColorWithColor(context, [[self borderColor] CGColor]);
    CGContextAddPath(context, path);
    // Sets popup window border width
    CGContextSetLineWidth(context, [placed borderThickness]);
    CGContextStrokePath(context);
    // Determine label position in this window
    CGPoint centerPoint = boundsRect.origin;
    centerPoint.x += boundsRect.size.width / 2 - 10;
    centerPoint.y += boundsRect.size.height / 4;
    // Set label text
    [[self tintColor] set];
    // Render label
    [[placed ID] drawAtPoint:centerPoint withFont:[UIFont fontWithName:@"Arial" size:14]];
    CGPathRelease(path);
}
@end

See also:

Creating a Map Popup Window