我有一个基于地图的应用程序,使用谷歌地图' iOS SDK。我需要更改群集图标,因为它在群集上显示圆形图像。在googlemap SDK圈子正在创建显示数量的标记。如何更改群集图标,因为它显示棕色圆圈?请帮助我,我需要焦急地说.Below是Cluster Creating code
- (UIImage*) generateClusterIconWithCount:(NSUInteger)count {
int diameter = 40;
float inset = 3;
CGRect rect = CGRectMake(0, 0, diameter, diameter);
UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0);
CGContextRef ctx = UIGraphicsGetCurrentContext();
// set stroking color and draw circle
[[UIColor colorWithRed:1 green:1 blue:1 alpha:0.8] setStroke];
[[UIColor brownColor] setFill];
CGContextSetLineWidth(ctx, inset);
// make circle rect 5 px from border
CGRect circleRect = CGRectMake(0, 0, diameter, diameter);
circleRect = CGRectInset(circleRect, inset, inset);
// draw circle
CGContextFillEllipseInRect(ctx, circleRect);
CGContextStrokeEllipseInRect(ctx, circleRect);
CTFontRef myFont = CTFontCreateWithName( (CFStringRef)@"Helvetica-Bold", 18.0f, NULL);
NSDictionary *attributesDict = [NSDictionary dictionaryWithObjectsAndKeys:
(__bridge id)myFont, (id)kCTFontAttributeName,
[UIColor whiteColor], (id)kCTForegroundColorAttributeName, nil];
// create a naked string
NSString *string = [[NSString alloc] initWithFormat:@"%lu", (unsigned long)count];
NSAttributedString *stringToDraw = [[NSAttributedString alloc] initWithString:string
attributes:attributesDict];
// flip the coordinate system
CGContextSetTextMatrix(ctx, CGAffineTransformIdentity);
CGContextTranslateCTM(ctx, 0, diameter);
CGContextScaleCTM(ctx, 1.0, -1.0);
CTFramesetterRef frameSetter = CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef)(stringToDraw));
CGSize suggestedSize = CTFramesetterSuggestFrameSizeWithConstraints(
frameSetter, /* Framesetter */
CFRangeMake(0, stringToDraw.length), /* String range (entire string) */
NULL, /* Frame attributes */
CGSizeMake(diameter, diameter), /* Constraints (CGFLOAT_MAX indicates unconstrained) */
NULL /* Gives the range of string that fits into the constraints, doesn't matter in your situation */
);
CFRelease(frameSetter);
//Get the position on the y axis
float midHeight = diameter;
midHeight -= suggestedSize.height;
float midWidth = diameter / 2;
midWidth -= suggestedSize.width / 2;
CTLineRef line = CTLineCreateWithAttributedString(
(__bridge CFAttributedStringRef)stringToDraw);
CGContextSetTextPosition(ctx, midWidth, 12);
CTLineDraw(line, ctx);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
答案 0 :(得分:1)
检查这个!
-(UIImage*) generateClusterIconWithCount:(NSUInteger)count {
int diameter = 40;
float inset = 3;
CGRect rect = CGRectMake(0, 0, diameter, diameter);
UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0);
CGContextRef ctx = UIGraphicsGetCurrentContext();
// set stroking color and draw circle
// [[UIColor colorWithRed:1 green:1 blue:1 alpha:0.8] setStroke];
// [[UIColor brownColor] setFill];
CGContextSetLineWidth(ctx, inset);
// make circle rect 5 px from border
CGRect circleRect = CGRectMake(0, 0, diameter, diameter);
circleRect = CGRectInset(circleRect, inset, inset);
UIImage *titleImage = [UIImage imageNamed:@"images.jpg"];
[titleImage drawInRect:circleRect];
// draw circle
//CGContextFillEllipseInRect(ctx, circleRect);
// CGContextStrokeEllipseInRect(ctx, circleRect);
CTFontRef myFont = CTFontCreateWithName( (CFStringRef)@"Helvetica-Bold", 18.0f, NULL);
NSDictionary *attributesDict = [NSDictionary dictionaryWithObjectsAndKeys:
(__bridge id)myFont, (id)kCTFontAttributeName,
[UIColor whiteColor], (id)kCTForegroundColorAttributeName, nil];
// create a naked string
NSString *string = [[NSString alloc] initWithFormat:@"%lu", (unsigned long)count];
NSAttributedString *stringToDraw = [[NSAttributedString alloc] initWithString:string
attributes:attributesDict];
// flip the coordinate system
CGContextSetTextMatrix(ctx, CGAffineTransformIdentity);
CGContextTranslateCTM(ctx, 0, diameter);
CGContextScaleCTM(ctx, 1.0, -1.0);
CTFramesetterRef frameSetter = CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef)(stringToDraw));
CGSize suggestedSize = CTFramesetterSuggestFrameSizeWithConstraints(
frameSetter, /* Framesetter */
CFRangeMake(0, stringToDraw.length), /* String range (entire string) */
NULL, /* Frame attributes */
CGSizeMake(diameter, diameter), /* Constraints (CGFLOAT_MAX indicates unconstrained) */
NULL /* Gives the range of string that fits into the constraints, doesn't matter in your situation */
);
CFRelease(frameSetter);
//Get the position on the y axis
float midHeight = diameter;
midHeight -= suggestedSize.height;
float midWidth = diameter / 2;
midWidth -= suggestedSize.width / 2;
CTLineRef line = CTLineCreateWithAttributedString(
(__bridge CFAttributedStringRef)stringToDraw);
CGContextSetTextPosition(ctx, midWidth, 12);
CTLineDraw(line, ctx);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}