दिलचस्प पोस्ट
रिटर्न स्टेटमेंट बनाम निकास () में मुख्य () UIImage में एक छवि को अतुल्यकालिक रूप से लोड करना क्या यह एक शीर्षक शैली के लिए संभव है? (और सीएसएस या जेएस के साथ?) UIButton IOS7 में टैप पर हाइलाइट नहीं दिखा रहा है Application.DoEvents का उपयोग () इंटरफ़ेस बिल्डर: UIView के लेआउट iOS 6/7 Deltas क्या हैं? एंड्रॉइड पर एफएफएमपीएजी एक बटन क्लिक करने पर PHP फ़ंक्शन कैसे कॉल करें "BEGIN आरएसए निजी कुंजी" और "BEGIN निजी कुंजी" के बीच अंतर क्या है जावा में if / else बनाम स्विच स्टेटमेंट का रिश्तेदार प्रदर्शन अंतर क्या है? डॉस बैच में तार्किक ऑपरेटरों ("और", "या") पर्ल मेमोरी यूज प्रोफाइलिंग और लीक डिटेक्शन? जावा स्विच स्टेटमेंट: लगातार अभिव्यक्ति की आवश्यकता है, लेकिन यह निरंतर है Django में, कैसे एक गतिशील फ़ील्ड lookups के साथ एक QuerySet फिल्टर है? SQL सर्वर के साथ अद्यतन का चयन करें

कैसे एक ढाल के साथ एक UIBezierPath भरने के लिए?

मैंने एक UIBezierPath का उपयोग करके एक ग्राफ खींचा है I मैं एक ठोस रंग के साथ ग्राफ़ के नीचे क्षेत्र को भर सकता हूं, लेकिन मैं एक ग्राउंड के नीचे क्षेत्र को एक रंग के बजाय ढाल के साथ भरना चाहता हूं। लेकिन मुझे यकीन नहीं है कि ग्रेडिएंट कैसे करना है, केवल ग्राफ़ पर लागू होते हैं और संपूर्ण दृश्य पर नहीं, मैंने कुछ सवाल पढ़ा है लेकिन कुछ भी लागू नहीं पाया।

यहां छवि विवरण दर्ज करें

यह मुख्य ग्राफ आरेखण कोड है:

// Draw the graph UIBezierPath *barGraph = [UIBezierPath bezierPath]; barGraph.lineWidth = 1.0f; [blueColor setStroke]; TCDataPoint *dataPoint = self.testData[0]; CGFloat x = [self convertTimeToXPoint:dataPoint.time]; CGFloat y = [self convertDataToYPoint:dataPoint.dataUsage]; CGPoint plotPoint = CGPointMake(x,y); [barGraph moveToPoint:plotPoint]; for (int ii = 1; ii < [self.testData count]; ++ii) { dataPoint = self.testData[ii]; x = [self convertTimeToXPoint:dataPoint.time]; y = [self convertDataToYPoint:dataPoint.dataUsage]; plotPoint = CGPointMake(x, y); [barGraph addLineToPoint:plotPoint]; } [barGraph stroke]; 

मैं निम्नलिखित जैसे कोड के साथ प्रयोग करके ग्राफ को भरने का प्रयास कर रहा हूं, लेकिन ईमानदारी से यह सुनिश्चित नहीं कर सकता कि मैं विभिन्न ट्यूटोरियल और दस्तावेजों के माध्यम से जाने के बावजूद क्या कर रहा हूं:

 [barGraph closePath]; CGFloat colors [] = { 1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0 }; CGColorSpaceRef baseSpace = CGColorSpaceCreateDeviceRGB(); CGGradientRef gradient = CGGradientCreateWithColorComponents(baseSpace, colors, NULL, 2); CGColorSpaceRelease(baseSpace); CGPoint startPoint = CGPointMake(CGRectGetMidX(self.bounds), self.topY); CGPoint endPoint = CGPointMake(CGRectGetMidX(self.bounds), self.bottomY); CGContextRef context = UIGraphicsGetCurrentContext(); CGContextClip(context); CGContextDrawLinearGradient(context, gradient, startPoint, endPoint, 0); CGGradientRelease(gradient); 

वेब के समाधान से एकत्रित समाधान "कैसे एक ढाल के साथ एक UIBezierPath भरने के लिए?"

सबसे आसान तरीका है मूल ग्राफ बेज़ियर पथ का उपयोग करने के लिए आपको एक मुखौटा बनाने और एक ढाल परत पर यह मुखौटा लगाने के लिए। अब ग्रेडिएंट परत के शीर्ष पर ग्राफ़ लेयर लगाइये।

उदाहरण के लिए, उदाहरण के लिए, कैसपेलेयर बनाएं, ग्राफ़ बेज़ियर पथ को बंद करें, अपना रास्ता आकार के परत के रूप में सेट करें, और इसे काला करें अब आपके पास एक मुखौटा है जो ग्राफ़ के नीचे क्षेत्र का आकार है। अब एक CAGradientLayer बनाओ और CAShapeLayer का mask बनाओ। उस के सामने, वास्तविक ग्राफ को रखें।

इसलिए उदाहरण के लिए ( संपादित ):

यहां छवि विवरण दर्ज करें

यहाँ वह कोड है जिसे मैं उस चित्र बनाने के लिए प्रयोग किया था (मेरे बेज़ियर पथ बहुत सरल है, सिर्फ चार अंक तीन रेखा से जुड़े हुए हैं, लेकिन आप स्पष्ट रूप से देख सकते हैं कि इसके नीचे का क्षेत्र एक ढाल है):

 CAShapeLayer* shape = [[CAShapeLayer alloc] init]; shape.frame = self.graph.bounds; CGFloat h = shape.frame.size.height; CGFloat w = shape.frame.size.width; NSArray* points = @[ [NSValue valueWithCGPoint:CGPointMake(0,h-50)], [NSValue valueWithCGPoint:CGPointMake(70,h-100)], [NSValue valueWithCGPoint:CGPointMake(140,h-75)], [NSValue valueWithCGPoint:CGPointMake(w,h-150)], ]; UIBezierPath* p = [UIBezierPath new]; [p moveToPoint:[points[0] CGPointValue]]; for (NSInteger i = 1; i < points.count; i++) [p addLineToPoint:[points[i] CGPointValue]]; shape.path = p.CGPath; shape.strokeColor = [UIColor blackColor].CGColor; shape.lineWidth = 2; shape.fillColor = nil; CAGradientLayer* grad = [[CAGradientLayer alloc] init]; grad.frame = self.graph.bounds; grad.colors = @[(id)[UIColor blueColor].CGColor, (id)[UIColor yellowColor].CGColor]; CAShapeLayer* mask = [[CAShapeLayer alloc] init]; mask.frame = self.graph.bounds; [p addLineToPoint:CGPointMake(w,h)]; [p addLineToPoint:CGPointMake(0,h)]; [p closePath]; mask.path = p.CGPath; mask.fillColor = [UIColor blackColor].CGColor; grad.mask = mask; [self.graph.layer addSublayer:grad]; [self.graph.layer addSublayer:shape];