2011-07-10 16 views
6

Cho đến nay tôi đã xem xét việc sử dụng CGContextDrawLinearGradient() và CGContextDrawRadialGradient(), tuy nhiên, trước đây tôi không thể tìm ra cách làm cho gradient trông giống như hình cầu, và sau này, tôi không thể tìm ra cách để làm cho gradient thành hình dạng của một hình cầu, bởi vì mỗi lần tôi thử, nó biến thành hình dạng của hình trụ đầy đủ thay vì chỉ một hình cầu.Trong Phát triển iOS, sử dụng Đồ họa cốt lõi và/hoặc Quartz 2D, làm thế nào tôi có thể vẽ một vòng tròn chứa một gradient theo cách mà nó trông giống như một hình cầu?

Mã tôi đang sử dụng để vẽ hiện tại vòng tròn 2D được hiển thị bên dưới. Tôi muốn sử dụng một gradient hoặc bất kỳ phương pháp nào khác có thể chỉ sử dụng Core Graphics và/hoặc Quartz 2D để lấp đầy vòng tròn theo cách mà làm cho nó trông giống như một hình cầu.

mã hiện để vẽ một vòng tròn:

CGContextRef ctx = UIGraphicsGetCurrentContext(); 
float x = 20.0; 
float y = 20.0; 
float radius = 12.5; 
CGContextFillEllipseInRect(ctx, CGRectMake(x, y, radius, radius); 

T.B. - Đoạn mã trên hoạt động đúng như mong đợi, vì vậy trong trường hợp có bất kỳ lỗi nào, chúng chỉ từ lỗi của tôi khi nhập câu hỏi, không phải khi nhập mã vào tệp thực.

+0

Bạn có thể đưa ra một hình ảnh ví dụ mà bạn cho rằng "trông giống như hình cầu" không? – jtbandes

Trả lời

8

Tôi tin rằng đây là hiệu ứng mà bạn đang tìm kiếm:

enter image description here

này được tạo ra sử dụng một gradient xuyên tâm. Gradient bắt đầu với bán kính 0 và kết thúc bằng bán kính có kích thước của vòng tròn. Điểm trung tâm của điểm bắt đầu phải nằm trong vòng tròn được tạo ra bởi phần cuối, hoặc thay vào đó bạn sẽ có hình dạng hình nón. Đây là mã tôi đã sử dụng để tạo hình ảnh này (một vài phần cần được dịch sang iOS trước khi bạn sử dụng nó):

CGContextRef ctxt = [[NSGraphicsContext currentContext] graphicsPort]; 
CGGradientRef gradient; 
CGColorSpaceRef colorSpace; 
CGFloat locations[] = {0.0,1.0}; 
CGFloat components[] = { 0.5,1.0,1.0,1.0, 0.25,0.5,0.5,1.0 }; 
colorSpace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB); 
gradient = CGGradientCreateWithColorComponents(colorSpace,components,locations, 
               sizeof(locations)/sizeof(CGFloat)); 
CGPoint start = {70.0,130.0}, end = {100.0,100.0}; 
CGFloat startRadius = 0.0, endRadius = 90.0; 
CGContextDrawRadialGradient(ctxt,gradient,start,startRadius,end,endRadius,0); 
CGGradientRelease(gradient); 
CGColorSpaceRelease(colorSpace); 
Các vấn đề liên quan