2013-12-06 3 views
1

Я пытаюсь создать UIImage из NSAttributedString, у которого есть искаженное преобразование. Я могу сделать UILabel или UIImageView и исказить это представление, но, к сожалению, мне нужно создать UIImage после того, как строка была перекошена. Я попытался следующие ..Создайте UIImage после перекоса текста

CGAffineTransform skewTransform = CGAffineTransformIdentity; 
skewTransform.b = (M_1_PI/2); 

UIGraphicsBeginImageContextWithOptions(mSize, NO, 1.0); 
UILabel* skewedLabel = [[UILabel alloc] init]; 
skewedLabel.attributedText = stringToBeSkewed; 
CGContextSetTextMatrix(UIGraphicsGetCurrentContext(), skewTransform); 
skewedLabel.layer.affineTransform = skewTransform; 

// The following 3 calls haven't worked 
// [stringToBeSkewed drawInRect:inputRectParam.rect]; 
// [skewedLabel.layer renderInContext:UIGraphicsGetCurrentContext()]; 
// [skewedLabel.layer drawInContext:UIGraphicsGetCurrentContext()]; 

UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

я получаю, что CALayer является CoreAnimation и CoreGraphics не признает это, но есть способ, чтобы получить искаженный текст, который будет захвачен в контексте и превращается в UIImage ?

ответ

1

Мне удалось получить UIImage из текста, сделав следующее, надеясь, что это поможет кому-то. Кроме того, это не самый чистый образ, поэтому любые советы по его усилению будут оценены.

UIFont* font = [UIFont fontWithName:@"(your font name)" size:60]; 
CTFontRef skewFont = CTFontCreateWithName((__bridge CFStringRef)font.fontName, font.pointSize, NULL); 

// Create an attributed string for shadowed text 
CFStringRef skewKeys[] = { kCTFontAttributeName, kCTForegroundColorAttributeName }; 
CFTypeRef skewValues[] = { skewFont, [UIColor colorWithRed:0 green:0 blue:0 alpha:.4].CGColor }; 
CFDictionaryRef skewAttributes = CFDictionaryCreate(NULL, (const void **)&skewKeys, (const void **)&skewValues, 
              sizeof(skewKeys)/sizeof(skewKeys[0]), &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); 
CFStringRef theCFString = (__bridge CFStringRef)inputStringParam.string; 
CFAttributedStringRef skewString = CFAttributedStringCreate(NULL, theCFString, skewAttributes); 
CFRelease(skewAttributes); 


// create skew transform 
CGAffineTransform skewTransform = CGAffineTransformIdentity; 
skewTransform.b = (value to be skewed); 

// Draw the string 
CTLineRef skewLine = CTLineCreateWithAttributedString(skewString); 

CGContextSetTextMatrix(UIGraphicsGetCurrentContext(), CGAffineTransformMakeScale(1.0, -1.0)); 
CGContextConcatCTM(UIGraphicsGetCurrentContext(), skewTransform); 

// draw and capture shadow image 
CGContextSetTextPosition(UIGraphicsGetCurrentContext(), inputDrawPointParam.point.x, inputDrawPointParam.point.y); 
CTLineDraw(skewLine, UIGraphicsGetCurrentContext()); 

UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

CFRelease(skewLine); 
CFRelease(skewString); 
CFRelease(skewFont); 
Смежные вопросы