का उपयोग कर ढाल के कोण को परिभाषित करना मैं CaGradientLayer
का उपयोग करके कोणीय ढाल खींचने की कोशिश कर रहा हूं। मुझे पता है कोण को startPoint
और endPoint
का उपयोग करके परिभाषित किया जा सकता है। मैं 0, 90, 180, 360 इत्यादि जैसे कुछ मानक कोणों के लिए इन बिंदुओं की गणना कर सकता हूं लेकिन मैं इन बिंदुओं को मनमाने ढंग से कोण के लिए तैयार करना चाहता हूं। मैंने कुछ त्रिकोणमिति का उपयोग करके इसे कंप्यूटिंग करने का प्रयास किया है, लेकिन कोई सफलता नहीं मिली है। क्या कोई मुझे मनमानी कोणों के लिए इन बिंदुओं की गणना करने के बारे में कोई निर्देश दे सकता है?CAGradientLayer
उत्तर
यहां एक ऐसी विधि है जो एक दृश्य बनाता है जो स्लाइडर (या कुछ भी) से इनपुट के आधार पर अपने दो रंगीन ढाल के 360 डिग्री रोटेशन की अनुमति देता है। आने वाले स्लाइडर मान ("x" चर नीचे) 0.0 और 1.0 के बीच है।
0.0 पर ढाल क्षैतिज (शीर्ष पर रंग ए के साथ, और नीचे रंग बी के साथ) है, 360 डिग्री से 360 के बीच घूर्णन (मान 0.0 के बराबर या एक पूर्ण रोटेशन)।
उदा। जब x = 0.25, रंग ए छोड़ा गया है और रंग बी सही है। 0.5 पर, रंग ए नीचे है और रंग बी ऊपर है, 0.75 रंग ए सही है और रंग बी छोड़ा गया है। यह विरोधी-घड़ी के दाएं से बाएं घुमाता है।
इसमें चार तर्क होते हैं: फ्रेम, रंग, रंगीन इनपुट और इनपुट मान (0-1)।
-(UIView *)gradientViewWithFrame:(CGRect)frame colourA:(UIColor *)A colourB:(UIColor *)B rotation:(float)x {
//x is between 0 and 1, eg. from a slider, representing 0 - 360 degrees
//colour A starts on top, with colour B below
//rotations move anti-clockwise
//1. create the colour view
UIView * colourView = [UIView new];
colourView.frame = frame;
//2. create the gradient layer
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = colourView.bounds;
gradient.colors = [NSArray arrayWithObjects:(id)[A CGColor], (id)[B CGColor], nil];
[colourView.layer insertSublayer:gradient atIndex:0];
//3. create coordinates
float a = pow(sinf((2*M_PI*((x+0.75)/2))),2);
float b = pow(sinf((2*M_PI*((x+0.0)/2))),2);
float c = pow(sinf((2*M_PI*((x+0.25)/2))),2);
float d = pow(sinf((2*M_PI*((x+0.5)/2))),2);
//4. set the gradient direction
[gradient setStartPoint:CGPointMake(a, b)];
[gradient setEndPoint:CGPointMake(c, d)];
return colourView;
}
स्विफ्ट 3
static func setGradient(view: UIView!,viewRadius: CGFloat!, color1: UIColor!, color2: UIColor!, angle: Double!, alphaValue: CGFloat!){
let gradient = CAGradientLayer()
gradient.frame = CGRect(origin: CGPoint.zero, size: view.frame.size)
gradient.colors = [color1.withAlphaComponent(alphaValue).cgColor, color2.withAlphaComponent(alphaValue).cgColor]
let x: Double! = angle/360.0
let a = pow(sinf(Float(2.0 * M_PI * ((x + 0.75)/2.0))),2.0);
let b = pow(sinf(Float(2*M_PI*((x+0.0)/2))),2);
let c = pow(sinf(Float(2*M_PI*((x+0.25)/2))),2);
let d = pow(sinf(Float(2*M_PI*((x+0.5)/2))),2);
gradient.endPoint = CGPoint(x: CGFloat(c),y: CGFloat(d))
gradient.startPoint = CGPoint(x: CGFloat(a),y:CGFloat(b))
view.roundCorners([.topLeft, .bottomLeft], radius: viewRadius)
view.layer.insertSublayer(gradient, at: 0)
}
यह भारी सार्थक शर्मा समाधान पर आधारित है। मैं UIView का ही विस्तार कर दिया और मैं पठनीयता और प्रकार रूपांतरण थोड़ा सुधार किया जा सकता लगा:
extension UIView {
func setGradient(colors: [CGColor], angle: Float = 0) {
let gradientLayerView: UIView = UIView(frame: CGRect(x:0, y: 0, width: bounds.width, height: bounds.height))
let gradient: CAGradientLayer = CAGradientLayer()
gradient.frame = gradientLayerView.bounds
gradient.colors = colors
let alpha: Float = angle/360
let startPointX = powf(
sinf(2 * Float.pi * ((alpha + 0.75)/2)),
2
)
let startPointY = powf(
sinf(2 * Float.pi * ((alpha + 0)/2)),
2
)
let endPointX = powf(
sinf(2 * Float.pi * ((alpha + 0.25)/2)),
2
)
let endPointY = powf(
sinf(2 * Float.pi * ((alpha + 0.5)/2)),
2
)
gradient.endPoint = CGPoint(x: CGFloat(endPointX),y: CGFloat(endPointY))
gradient.startPoint = CGPoint(x: CGFloat(startPointX), y: CGFloat(startPointY))
gradientLayerView.layer.insertSublayer(gradient, at: 0)
layer.insertSublayer(gradientLayerView.layer, at: 0)
}
}
एक नया या संबंधित स्विफ्ट फ़ाइल और तुम सब करने की या तो myView.setGradient(colors: gradientColorsArray)
या myView.setGradient(colors: gradientColorsArray, angle: 90)
फोन है करने के लिए इस जोड़े ।
- 1. CAGradientLayer
- 2. CAGradientLayer
- 3. मिश्रण CAGradientLayer छाया
- 4. आईओएस UITableView: CAGradientLayer
- 5. CAGradientLayer गुण UIView एनीमेशन ब्लॉक
- 6. CAGradientLayer वापस करने के लिए
- 7. क्षैतिज CAGradientLayer आईओएस में 7.0
- 8. स्विफ्ट 2.1: CAGradientLayer रंग स्थान और वितरण
- 9. रोटेशन के बाद कैग्रेडिएंट लेयर का आकार कैसे बदलें?
- 10. उद्देश्य-सी - अपरिभाषित प्रतीकों
- 11. तेजी से एक sublayer कैसे सम्मिलित करें?
- 12. आईओसी CGColor बनाम यूआईसीओलर
- 13. उद्देश्य-सी में डॉलर का मतलब क्या है?
- 14. आईफोन आईओएस बटन के पाठ या छवि के नीचे यूआई बटन पर रैखिक ढाल कैसे जोड़ सकता है?
- 15. इंटरफ़ेस बिल्डर के साथ UIView पृष्ठभूमि ग्रेडियेंट देखें
- 16. आईओएस
- 17. UIButton: ढाल परत जोड़ें और शीर्षक अब और नहीं दिखाया गया है - कैसे ठीक करें?
- 18. UIView पारदर्शी ढाल
- 19. स्विफ्ट
- 20. GradientLayer के साथ UIButton छवि को अस्पष्ट करता है और अंधेरे ढाल
- 21. sendSubviewToBack UITableView पर iOS में ठीक से काम नहीं 11
- 22. UITableViewCell में सेट क्षैतिज ढाल तेज
- 23. drawRect में ढाल के साथ पथ कैसे भरें :?
- 24. आईआईएममेज व्यू
- 25. आईओएस
- 26. शीर्ष और नीचे
- 27. प्रतिक्रिया मूल आईओएस में एक छवि पर पारदर्शी ढाल कैसे करें?
- 28. एक कैलियर
- 29. 'CGPointMake' में तेजी से
- 30. CALayer.contents में UIImage को चित्रित करने से छवि डेटा
'कैग्रेडिएंटलेयर' केवल अक्षीय (दिशात्मक) ग्रेडियेंट का समर्थन करता है। –
@ डेविड रोन्न्क्विस्ट मुझे पता है कि। मैं रेडियल ग्रेडियेंट्स के बारे में बात नहीं कर रहा हूं। मैं अक्षीय ढाल के कोण को देने की कोशिश कर रहा हूँ। – blancos
तो आप कोण को दिए गए दो बिंदुओं को समझने के लिए त्रिकोणमिति के बारे में पूछ रहे हैं? –