यहाँ एक तकनीक मैट Gallagher के लिए इसी तरह की है कि, जो उत्पन्न होगा है: https://github.com/robinsenior/RSMaskedLabel
प्रासंगिक कोड भविष्य लिंक-सड़ांध से बचने के लिए यहाँ है एक छवि के साथ एक उलटा पाठ मुखौटा।
एक (परिवर्तनीय) डेटा बफर आवंटित करें। 8-बिट अल्फा चैनल के साथ बिटमैप संदर्भ बनाएं। टेक्स्ट ड्राइंग के लिए सेटिंग्स कॉन्फ़िगर करें। प्रतिलिपि में पूर्ण बफर भरें (डिफ़ॉल्ट रंग माना जाता है कि 1 का अल्फा मान है)। स्पष्ट मोड में टेक्स्ट लिखें (0 का अल्फा मान)। बिटमैप संदर्भ से एक छवि बनाएँ। स्रोत छवि से एक नई छवि बनाने के लिए एक मुखौटा के रूप में बिटमैप का उपयोग करें। एक नया UIImage बनाएँ और साफ करें।
हर बार टेक्स्टस्ट्रिंग या स्रोत छवि या आकार मान बदलते हैं, अंतिम छवि को पुन: उत्पन्न करते हैं।
CGSize size = /* assume this exists */;
UIImage *sourceImage = /* assume this exists */;
NSString *textString = /* assume this exists */;
char *text = [textString cStringUsingEncoding:NSMacOSRomanStringEncoding];
NSUInteger len = [textString lengthOfBytesUsingEncoding:cStringUsingEncoding:NSMacOSRomanStringEncoding];
NSMutableData *data = [NSMutableData dataWithLength:size.width*size.height*1];
CGContextRef context = CGBitmapContextCreate([data mutableBytes], size.width, size.height, 8, size.width, NULL, kCGImageAlphaOnly);
CGContextSelectFont(context, "Gill Sans Bold", 64.0f, kCGEncodingMacRoman);
CGContextSetTextDrawingMode(context, kCGTextFill);
CGContextSetBlendMode(context, kCGBlendModeCopy);
CGContextFillRect(context, overlay.bounds);
CGContextSetBlendMode(context, kCGBlendModeClear);
CGContextShowTextAtPoint(context, 16.0f, 16.0f, text, len);
CGImageRef textImage = CGBitmapContextCreateImage(context);
CGImageRef newImage = CGImageCreateWithMask(sourceImage.CGImage, textImage);
UIImage *finalImage = [UIImage imageWithCGImage:newImage];
CGContextRelease(context);
CFRelease(newImage);
CFRelease(textImage);
ऐसा करने का एक और तरीका टेक्स्ट इमेज को एक नई परत में डालने और उस परत को आपके दृश्य की परत पर सेट करना शामिल है। (लाइनों है कि बनाने के "newImage" और "finalImage" निकालें।) यह मानते हुए कहीं अपने दृश्य के कोड के अंदर होता है:
CALayer *maskLayer = [[CALayer alloc] init];
CGPoint position = CGPointZero;
// layout the new layer
position = overlay.layer.position;
position.y *= 0.5f;
maskLayer.bounds = overlay.layer.bounds;
maskLayer.position = position;
maskLayer.contents = (__bridge id)textImage;
self.layer.mask = maskLayer;
अधिक विकल्प नहीं हैं, कुछ बेहतर (उपवर्ग UIImage हो सकता है और स्पष्ट में सीधे पाठ आकर्षित हो सकता है सुपरक्लास ने अपना ड्राइंग करने के बाद मोड?)।
अब तक, आगे रोमांचक क्वार्ट्ज दस्तावेज़ों में गोताखोरी से, मेरा मानना है कि मैं 'CGContextSetTextDrawingMode' और' kCGTextClip' – runmad
उपयोग करने के लिए http://stackoverflow.com/questions/19787238/transparent- को मेरा उत्तर देखें जरूरत इस समस्या के पथ-आधारित दृष्टिकोण के लिए uilabel-textcolor-on-superview-superview-sort-of। –