2010-05-12 5 views
5

निम्नलिखित कोड एक ढाल के साथ लाल से हरे रंग के आधा चक्र खींचता है। यह वही नहीं है जो मैं चाहता था। मुझे चौड़ाई 5 पिक्सल की चाप की उम्मीद है जो ढाल के साथ चित्रित है।मैं एक ढाल भरा आर्क कैसे बना सकता हूं, यानी इंद्रधनुष?

यह दिखाने में कोई मदद कि मैं गलत कहां गया हूं, इसकी सराहना की जाएगी।

चार्ल्स

-(void) DrawRainbow { 
// Create an arc path 
float x = 150.0; 
float y = 220.0; 
float radius = 75.0; 
float startAngle = M_PI; 
float endAngle = 2*M_PI; 
bool clockWise = false; 
CGMutablePathRef path = CGPathCreateMutable(); 
CGPathAddArc(path, nil, x, y, radius, startAngle, endAngle, clockWise); 

// Setup the gradient 
size_t num_locations = 2; 
CGFloat locations[2] = { 0.0, 1.0 }; 
CGFloat components[8] = { 
    1.0, 0.0, 0.0, 1.0, // Start color is red 
    0.0, 1.0, 0.0, 1.0 }; // End color is green 
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
CGGradientRef gradientFill = 
    CGGradientCreateWithColorComponents (colorSpace, components, 
             locations, num_locations); 
// setup gradient points 
CGRect pathRect = CGPathGetBoundingBox(path); 
CGPoint myStartPoint, myEndPoint; 
myStartPoint.x = CGRectGetMinX(pathRect); 
myStartPoint.y = CGRectGetMinY(pathRect); 
myEndPoint.x = CGRectGetMaxX(pathRect); 
myEndPoint.y = CGRectGetMinY(pathRect); 

// draw the gradient 
CGContextRef context = UIGraphicsGetCurrentContext(); 
CGContextSetLineWidth(context, 5.0); 
CGContextAddPath(context, path); 
CGContextSaveGState(context); 
CGContextClip(context); 
CGContextDrawLinearGradient (context, gradientFill, 
          myStartPoint, myEndPoint, 0); 
CGContextRestoreGState(context); 

CGGradientRelease(gradientFill); 
CGColorSpaceRelease(colorSpace); 

}

उत्तर

3

मुझे लगता है कि आप एक रेडियल ग्रेडिएंट चाहते हैं। यह ऐप्पल दस्तावेज़ देखें।

https://developer.apple.com/library/mac/#documentation/graphicsimaging/conceptual/drawingwithquartz2d/dq_shadings/dq_shadings.html

+0

लिंक्ड दस्तावेज़ भी एक उदाहरण (चित्रा 8-2) यह है कि क्या ओ पी चाहता था, नहीं एक रेडियल के रूप में छोड़कर पता चलता है। प्रक्रिया को समझाते हुए एक उत्कृष्ट प्रारंभिक बिंदु होना चाहिए। – Doc

-3

जिसके परिणामस्वरूप ढाल, मेरे लिए, एक ईंधन गेज के लिए पृष्ठभूमि की तरह लग रहा है, तो रेडियल ग्रेडिएंट उचित प्रभाव नहीं दे सकता है। मुझे क्वार्ट्ज के साथ बहुत अधिक अनुभव नहीं है, लेकिन मेरा विचार पृष्ठभूमि रंग का उपयोग करके एक अंडाकार भरना है।

enter image description here

radius -= 5.0; 
CGRect rainbowArch = CGRectMake(x - radius, y - radius, 2 * radius, 2 * radius); 
const CGFloat * bgComponents = CGColorGetComponents(self.backgroundColor.CGColor); 
CGContextSetRGBFillColor(context, bgComponents[0], bgComponents[1], bgComponents[2], 1.0); 
CGContextFillEllipseInRect(context, rainbowArch); 

... 
CGContextRestoreGState(context); 

CGGradientRelease(gradientFill); 
CGColorSpaceRelease(colorSpace); 
संबंधित मुद्दे