objective c - उद्देश्य सी-CAGradientLayer UILabel में टेक्स्ट को कवर करता है?




objective-c uiview (2)

CAGradientLayer आपके लेबल के पाठ को कवर कर रहा है क्योंकि पाठ को सुपर परत की सामग्री द्वारा तैयार किया गया है जिसे आप एक उपलक्ष्य जोड़कर स्पष्ट रूप से कवर किया है।

आपका सबसे आसान समाधान दो विचारों का उपयोग करना है एक UIView उपवर्ग जहां आप +[UIView layerClass] ओवरराइड करते हैं और एक [CAGradientLayer] वापस आ [CAGradientLayer] । अपना ढाल सेटअप करने के लिए एक अच्छा init विधि जोड़ें

अगला पिल्ला UILabel को आपके कस्टम ढाल दृश्य के एक UILabel रूप में जोड़ता है।

मैं CAGradientLayer को मेरे पाठ को कवर करने के कारण कुछ कारणों से एक ढाल लेता को अपने यूआईएलएबल में जोड़ने का प्रयास कर रहा हूं। क्या मैं गलत हूं

- (void)viewDidLoad {
   [super viewDidLoad];

   CAGradientLayer *gradient = [CAGradientLayer layer];
   gradient.frame = CGRectMake(0, 0, myLabel.frame.size.width, myLabel.frame.size.height);
   gradient.colors = myColors;
   [myLabel.layer insertSublayer:gradient atIndex:0];
}

मुझे भी यही समस्या थी। मैंने इस पद्धति को आकृति परत के लिए एक संदर्भ प्राप्त करने के लिए बनाया है या अगर वह वहां नहीं था तो इसे उत्पन्न करता है। यह विधि उस परत को पीठ में फेंकने के लिए सुनिश्चित करता है ताकि यह लेबल पाठ परत को कवर न करे। बस इसका इस्तेमाल करें और आप सभी अच्छे हों, कोई अतिरिक्त उप-वर्ग की आवश्यकता न हो।

- (CAShapeLayer*) getShapeLayerForObject: (UIView*) object{
    CAShapeLayer *maskLayer;
    int loc = -1;
    for(int x = 0; x < object.layer.sublayers.count; x++){
        if([[object.layer.sublayers objectAtIndex:x] isKindOfClass:[CAShapeLayer class]]){
            loc = x;
            break;
        }
    }
    if(loc > -1){
        maskLayer = (CAShapeLayer*) [object.layer.sublayers objectAtIndex:loc];
    }else{
        maskLayer = [[CAShapeLayer alloc] init];
        [object.layer insertSublayer:maskLayer atIndex:0];

    }
    return maskLayer;
}