我想在用户输入时为可编辑的UITextView
文本添加大纲或笔画。完全像模因:http://t.qkme.me/3oi5rs.jpg
我必须使用UITextView
因为我需要多行支持。我已经尝试了所有方法并得出结论我必须使用CoreText
。我几乎所有的解决方案都在工作,但是卡在textview文本中的文本卡住了。 drawRect
subview
中的UITextView
例程正确地绘制了大纲文本,直到文本换行。即使文本用户输入被包装,我绘制的轮廓文本也没有。以下是drawRect
方法的实现:https://gist.github.com/4498988。在第29行,我使用char包装:
CTLineBreakMode linebreakmode = kCTLineBreakByCharWrapping;
我已经尝试过wordwrapping选项(这也是默认选项)没用。
我的问题是: 如何将我绘制的文本正确包装,使其显示为键入文本的轮廓?
答案 0 :(得分:1)
// make your UITextView as a subclass of UITextView
// and override -drawRect: method in your UITextView subclass
- (void)drawRect:(CGRect)rect
{
self.textColor = [UIColor clearColor];
[self setTypingAttributes:[NSDictionary dictionaryWithObjectsAndKeys:self.font, NSFontAttributeName, _textBaseColor, NSForegroundColorAttributeName, nil ]]; // _textBaseColor is any color of your choice
CGRect newRect = CGRectMake(0, 0, CGRectGetWidth(self.frame), CGRectGetHeight(self.frame));
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetTextDrawingMode(context, kCGTextStroke);
// Make the thickness of the outline shadow. and increase the y position of shadow rect by 2.
CGContextSetLineWidth(context, (TEXTOUTLINE_PERCENT/100 * self.font.pointSize)+1); // TEXTOUTLINE_PERCENT can be 25.
CGContextSetLineJoin(context, kCGLineJoinRound);
CGContextSetLineCap(context, kCGLineCapButt);
CGContextSetStrokeColorWithColor(context, [UIColor clearColor].CGColor);
CGRect shadowrect = newRect;
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
{
shadowrect.origin.y += 0.5;
}
else
{
shadowrect.origin.y += 2;
}
[self.text drawInRect:shadowrect withAttributes:[NSDictionary dictionaryWithObjectsAndKeys:self.font, NSFontAttributeName, SHADOW_COLOR , NSForegroundColorAttributeName, nil]]; // SHADOW_COLOR can be [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.3]
// Make the thickness of the outline border of the text.
CGContextSetLineWidth(context, TEXTOUTLINE_PERCENT/100 * self.font.pointSize); // TEXTOUTLINE_PERCENT can be 25.
CGContextSetStrokeColorWithColor(context, [[UIColor clearColor] CGColor]);
[self.text drawInRect:newRect withAttributes:[NSDictionary dictionaryWithObjectsAndKeys:self.font, NSFontAttributeName, self.textOutlineColor , NSForegroundColorAttributeName, nil]];
// Draw filled text. This is the actual text.
CGContextSetTextDrawingMode(context, kCGTextFill);
CGContextSetFillColorWithColor(context, [[UIColor clearColor] CGColor]);
[self.text drawInRect:newRect withAttributes:[NSDictionary dictionaryWithObjectsAndKeys:self.font, NSFontAttributeName, _textBaseColor, NSForegroundColorAttributeName,_textBaseColor, NSStrokeColorAttributeName, nil]];
[super drawRect:rect];
}
答案 1 :(得分:0)
只需使用CSS
创建一个字符串NSString *htmlstring = [[NSString alloc] initWithFormat:@"<html><font style=\"text-shadow: 0 0 0.2em #F87, 0 0 0.2em #F87\">%@</font></html>", YourTextView.text, nil];
^这将使得在网页上读取TextView中的任何文本都会发光。 (如果你愿意,也可以给它一个黑色背景......使用它:
NSString *htmlstring = [[NSString alloc] initWithFormat:@"<html><body bgcolor=\"#000000\"><font style=\"text-shadow: 0 0 0.2em #F87, 0 0 0.2em #F87\">%@</font></body></html>", YourTextView.text, nil];
现在将其保存为html文件并将其加载到UIWebView中。或者通过javascript将其注入URL并将该URL加载到UIWebView中。
将UIWebView框架和位置设置为与UITextView的框架和位置相匹配,以便它将显示在它上面,并显示带有黑色背景的红色发光文本。
答案 2 :(得分:0)
在可编辑的文本字段(TextArea)中创建一个包含红色发光文本的HTML文件。
将所有元素的背景设置为透明。
将其变为字符串并将其加载到UIWebView中,该UIWebView位于要放置文本的图像的顶部。
将HTML字符串加载到UIWebView中,并使UIWebView本身透明。
*此外,您可能需要将UIWebView作为属性并进行综合。
这是代码(没有合成和属性)
·H:
@interface ViewController : UIViewController <uiwebviewdelegate></uiwebviewdelegate> {
IBOutlet UIWebView *webView;
//... other objects you already have can go here too..
}
的.m:
self.webView.delegate = self;
NSString *htmlstring = [[NSString alloc] initWithFormat:@"<html><body style='background-color: transparent;'><textarea name='myTextArea'cols='20' rows='10' style='text-shadow: 0 0 0.2em #F87, 0 0 0.2em #F87; background-color:transparent; border:none'>You Can Edit This Text.</textarea></body></html>"];
[self.webView loadHTMLString:htmlstring baseURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]]];
self.webView.opaque = NO;
self.webView.backgroundColor = [UIColor clearColor];
编辑:这是“webView”
的属性和合成代码@property(nonatomic,retain)IBOutlet UIWebView *nubrowser; //put in .h file at end of "@Interface" function after the closing curly bracket ("}")
@synthesize webView; //put in .m file directly after "@implementation" function