1
iOS5에서 잘 작동하는 다음 코드가 있습니다.iOS4에 CoreGraphics 그라디언트가 표시되지 않습니다.
//// Abstracted Graphic Attributes
NSString* textContent = [NSString stringWithFormat:@"%i",[myAnnotation.annotations count]];
//// General Declarations
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = UIGraphicsGetCurrentContext();
//// Gradient Declarations
NSArray* gradient3Colors = [NSArray arrayWithObjects:
(id)[UIColor lightGrayColor].CGColor,
(id)[UIColor darkGrayColor].CGColor, nil];
CGFloat gradient3Locations[] = {0, 1};
CGGradientRef gradient3 = CGGradientCreateWithColors(colorSpace, (CFArrayRef)gradient3Colors, gradient3Locations);
//// Oval Drawing
UIBezierPath* ovalPath = [UIBezierPath bezierPathWithOvalInRect: CGRectMake(0.5, 0.5, 34, 34)];
CGContextSaveGState(context);
[ovalPath addClip];
CGContextDrawRadialGradient(context, gradient3,
CGPointMake(17.5, 17.5), 10,
CGPointMake(17.5, 17.5), 30,
kCGGradientDrawsBeforeStartLocation | kCGGradientDrawsAfterEndLocation);
CGContextRestoreGState(context);
[[UIColor blackColor] setStroke];
ovalPath.lineWidth = 0.5;
[ovalPath stroke];
//// Text Drawing
CGRect textFrame = CGRectMake(0, 7.0, 35, 20);
[[UIColor whiteColor] setFill];
[textContent drawInRect: textFrame withFont: [UIFont fontWithName: @"HelveticaNeue" size: [UIFont systemFontSize]] lineBreakMode: UILineBreakModeWordWrap alignment: UITextAlignmentCenter];
//// Cleanup
CGGradientRelease(gradient3);
CGColorSpaceRelease(colorSpace);
중간에 회색 그라디언트가있는 원이 그립니다. 숫자입니다. iOS5에서는 올바르게 표시됩니다. iOS4에서는 오류가 없거나 잘못된 API와 모든 것을 사용하도록 경고하지만 회색 그라디언트가 그려집니다! 어떤 아이디어라도?
제 생각에 그건 ARC-on-ios4 문제입니다. 어레이를 만들기 전에 변수에 표준 색상을 지정하면 작동 할 수도 있습니다. – jrturton
ARC를 전혀 사용하지 않았습니다! –
나는이 문제를 너무나 ... 검은 색과 회색으로 본다. –