coretext显示文本从底部到顶部的文本域
问题描述:
我正在绘制一个文本框,并且我在UIView中添加了一个文本框。文本在路径中。它绘制正确,但内容从底部开始并结束于顶部。有没有办法来解决这个问题?coretext显示文本从底部到顶部的文本域
这里是我的代码:
// Draw text into a circle using Core Text and Quartz
- (void) drawRect:(CGRect)rect
{
[super drawRect: rect];
CGContextRef context = UIGraphicsGetCurrentContext();
self.layer.rasterizationScale = [[UIScreen mainScreen] scale];
// Flip the context
CGContextTranslateCTM(context, 0, 3);
CGContextSetTextMatrix(context, CGAffineTransformIdentity);
CGContextSetTextMatrix(context, CGAffineTransformMakeScale(1.0f, -1.0f));
// Stroke that path
CGContextAddPath(context, backPath);
CGContextSetLineWidth(context, 1.0f);
//[[UIColor blackColor] setStroke];
CGContextStrokePath(context);
// Fill that path
CGContextAddPath(context, backPath);
[[UIColor whiteColor] setFill];
CGContextFillPath(context);
CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)string);
CTFrameRef theFrame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, string.length),backPath, NULL);
CTFrameDraw(theFrame, context);
CFRelease(framesetter);
CFRelease(theFrame);
CFRelease(backPath);
}
这如何使路径:
- (id) initWithAttributedString: (NSAttributedString *) aString path: (vector<ofPoint>)paths
{
backPath = CGPathCreateMutable();
CGPathMoveToPoint(backPath, NULL, paths[0].x, paths[0].y); // Bottom left
for(int x=1; x< paths.size(); x++){
CGPathAddLineToPoint(backPath, NULL, paths[x].x,paths[x].y); // Bottom right
}
CGPathCloseSubpath(backPath);
if (!(self = [super initWithFrame:CGRectZero])) return self;
self.backgroundColor = [UIColor clearColor];
string = aString;
return self;
}
而为了让文本字段:
path.push_back(ofPoint(ofGetWidth()/4,ofGetHeight()/4));
// point to user
// path.push_back(ofPoint((position.x-(ofGetWidth()/4))/2,ofGetHeight()/4));
// point to right top
path.push_back(ofPoint(ofGetWidth()/4,ofGetHeight()/4));
// point to end x, pos y user
path.push_back(ofPoint((ofGetWidth()/4),(position.y-(ofGetHeight()/4))/2));
path.push_back(ofPoint((position.x-(ofGetWidth()/4))/2-100,(position.y-(ofGetHeight()/4))/2-100));
path.push_back(ofPoint((position.x-(ofGetWidth()/4))/2,(position.y-(ofGetHeight()/4))/2));
答
你是flippi文本矩阵。相反,翻转整个CTM:
CGContextScaleCTM(context, 1, -1);
CGContextTranslateCTM(context, 0, self.bounds.size.height);
好的,我应该在哪里添加这部分? – 2013-03-27 19:42:35
我已经在过去做过。但它只是使textField怪异。要创建上面的文本字段,我使用了上面添加的示例 – 2013-03-27 19:58:33