dmaclach द्वारा जवाब आकृतियों है कि आसानी से उलटा किया जा सकता है के लिए ही उपयुक्त है। मेरा समाधान एक कस्टम दृश्य है जो किसी भी आकार और पाठ के साथ काम करता है। इसके लिए आईओएस 4 की आवश्यकता है और संकल्प स्वतंत्र है।
सबसे पहले, कोड के बारे में एक ग्राफिकल स्पष्टीकरण। यहां आकार एक सर्कल है।
कोड एक सफेद ड्रॉपशैडो के साथ पाठ खींचता है। यदि इसकी आवश्यकता नहीं है, तो कोड को फिर से प्रतिक्रिया दी जा सकती है, क्योंकि ड्रॉपशैडो को अलग-अलग मास्क किया जाना चाहिए। यदि आपको आईओएस के पुराने संस्करण पर इसकी आवश्यकता है, तो आपको ब्लॉक को प्रतिस्थापित करना होगा और एक (परेशान) CGBitmapContext का उपयोग करना होगा।
- (UIImage*)blackSquareOfSize:(CGSize)size {
UIGraphicsBeginImageContextWithOptions(size, NO, 0);
[[UIColor blackColor] setFill];
CGContextFillRect(UIGraphicsGetCurrentContext(), CGRectMake(0, 0, size.width, size.height));
UIImage *blackSquare = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return blackSquare;
}
- (CGImageRef)createMaskWithSize:(CGSize)size shape:(void (^)(void))block {
UIGraphicsBeginImageContextWithOptions(size, NO, 0);
block();
CGImageRef shape = [UIGraphicsGetImageFromCurrentImageContext() CGImage];
UIGraphicsEndImageContext();
CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(shape),
CGImageGetHeight(shape),
CGImageGetBitsPerComponent(shape),
CGImageGetBitsPerPixel(shape),
CGImageGetBytesPerRow(shape),
CGImageGetDataProvider(shape), NULL, false);
return mask;
}
- (void)drawRect:(CGRect)rect {
UIFont *font = [UIFont fontWithName:@"HelveticaNeue-Bold" size:40.0f];
CGSize fontSize = [text_ sizeWithFont:font];
CGImageRef mask = [self createMaskWithSize:rect.size shape:^{
[[UIColor blackColor] setFill];
CGContextFillRect(UIGraphicsGetCurrentContext(), rect);
[[UIColor whiteColor] setFill];
// custom shape goes here
[text_ drawAtPoint:CGPointMake((self.bounds.size.width/2)-(fontSize.width/2), 0) withFont:font];
[text_ drawAtPoint:CGPointMake((self.bounds.size.width/2)-(fontSize.width/2), -1) withFont:font];
}];
CGImageRef cutoutRef = CGImageCreateWithMask([self blackSquareOfSize:rect.size].CGImage, mask);
CGImageRelease(mask);
UIImage *cutout = [UIImage imageWithCGImage:cutoutRef scale:[[UIScreen mainScreen] scale] orientation:UIImageOrientationUp];
CGImageRelease(cutoutRef);
CGImageRef shadedMask = [self createMaskWithSize:rect.size shape:^{
[[UIColor whiteColor] setFill];
CGContextFillRect(UIGraphicsGetCurrentContext(), rect);
CGContextSetShadowWithColor(UIGraphicsGetCurrentContext(), CGSizeMake(0, 1), 1.0f, [[UIColor colorWithWhite:0.0 alpha:0.5] CGColor]);
[cutout drawAtPoint:CGPointZero];
}];
// create negative image
UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0);
[[UIColor blackColor] setFill];
// custom shape goes here
[text_ drawAtPoint:CGPointMake((self.bounds.size.width/2)-(fontSize.width/2), -1) withFont:font];
UIImage *negative = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
CGImageRef innerShadowRef = CGImageCreateWithMask(negative.CGImage, shadedMask);
CGImageRelease(shadedMask);
UIImage *innerShadow = [UIImage imageWithCGImage:innerShadowRef scale:[[UIScreen mainScreen] scale] orientation:UIImageOrientationUp];
CGImageRelease(innerShadowRef);
// draw actual image
[[UIColor whiteColor] setFill];
[text_ drawAtPoint:CGPointMake((self.bounds.size.width/2)-(fontSize.width/2), -0.5) withFont:font];
[[UIColor colorWithWhite:0.76 alpha:1.0] setFill];
[text_ drawAtPoint:CGPointMake((self.bounds.size.width/2)-(fontSize.width/2), -1) withFont:font];
// finally apply shadow
[innerShadow drawAtPoint:CGPointZero];
}
मैं कुछ समय पहले यूआईटीएक्स्टफिल्ड को अनुकरण करने के लिए यह जानना चाहता था और क्वार्ट्ज (सुझाए गए अनुसार) का उपयोग कर रहा था लेकिन कुछ प्रदर्शन समस्याएं हैं, मुझे पूरा यकीन है कि आपके UILabel प्रतिपादन की सीमाओं को एनिमेट करना अच्छा नहीं लगेगा यह सुस्त दिखता है। मेरे मामले में मैंने एक विस्तारित यूआईएममेज का उपयोग करके समाप्त किया: खिंचाव इमेज विथलिफ्ट कैपविड्थ: टॉप कैपहाइट: यदि आपकी आवश्यकताओं के अनुरूप यह बहुत तेज है – nacho4d
आपके प्रश्न में छवि लिंक टूटे हुए हैं – jjxtra