दिलचस्प पोस्ट
स्थानीय रिपॉजिटरी शाखा को रीमोट रिपॉज़िटरी हेड जैसे रीसेट करें Window.location.href और Window.open () जावास्क्रिप्ट में विधियों रेल: कैसे और के बजाय चेन स्कोप प्रश्नों के साथ या? मिश्रण वर्ग और संरचना यह देखने के लिए कैसे जांच करें कि क्या मान एक MySQL में पूर्णांक है? वसंत बूट – माता-पिता पोम जब आपके पास पहले से ही एक माता पिता पोम होता है असाइनमेंट के माध्यम से पायथन कॉपी? पायथन 2.6 में मैं एक थ्रेड सुरक्षित प्रिंट कैसे प्राप्त करूं? URLConnection.setDoOutput () वास्तव में क्या प्रभावित करता है? जावास्क्रिप्ट में एक आइफ्रेम के शरीर की सामग्री कैसे प्राप्त करें? ट्रिगर ऑनमोसोवर ईवेंट प्रोग्रामेटिक रूप से जावास्क्रिप्ट में सभी सर्वर-साइड कोड के लिए ConfigureAwait को कॉल करने के लिए सर्वोत्तम अभ्यास सफारी में अमान्य तिथि सार्वजनिक, निजी और ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग में संरक्षित क्या हैं? एक विशिष्ट समय-क्षेत्र में सप्ताह के दिन php में कैसे खोजें

कैसे एक ढाल के साथ एक 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];