2012-03-28 2 views
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와 모든 것을 사용하도록 경고하지만 회색 그라디언트가 그려집니다! 어떤 아이디어라도?

답변

2

그래, iOS4는 어떤 이유로 색상이 정의 된 것을 좋아하지 않았습니다.

다음 수정 사항을 사용하십시오.

UIColor* myLightGrey = [UIColor colorWithRed: 0.66 green: 0.66 blue: 0.66 alpha: 1]; 
UIColor* myDarkGrey = [UIColor colorWithRed: 0.33 green: 0.33 blue: 0.33 alpha: 1]; 

//// Gradient Declarations 
NSArray* gradient3Colors = [NSArray arrayWithObjects: 
          (id)myLightGrey.CGColor, 
          (id)myDarkGrey.CGColor, nil]; 
CGFloat gradient3Locations[] = {0, 1}; 
+0

제 생각에 그건 ARC-on-ios4 문제입니다. 어레이를 만들기 전에 변수에 표준 색상을 지정하면 작동 할 수도 있습니다. – jrturton

+0

ARC를 전혀 사용하지 않았습니다! –

+0

나는이 문제를 너무나 ... 검은 색과 회색으로 본다. –

관련 문제