好的,我设法弄清楚为什么它不起作用。
Core Graphics 上下文是“反转”的,原点位于页面左下角,而 UIKit 的原点位于左上角。
这是我想出的方法:
- (void) drawTextLink:(NSString *) text inFrame:(CGRect) frameRect {
CGContextRef context = UIGraphicsGetCurrentContext();
CGAffineTransform ctm = CGContextGetCTM(context);
// Translate the origin to the bottom left.
// Notice that 842 is the size of the PDF page.
CGAffineTransformTranslate(ctm, 0.0, 842);
// Flip the handedness of the coordinate system back to right handed.
CGAffineTransformScale(ctm, 1.0, -1.0);
// Convert the update rectangle to the new coordiante system.
CGRect xformRect = CGRectApplyAffineTransform(frameRect, ctm);
NSURL *url = [NSURL URLWithString:text];
UIGraphicsSetPDFContextURLForRect( url, xformRect );
CGContextSaveGState(context);
NSDictionary *attributesDict;
NSMutableAttributedString *attString;
NSNumber *underline = [NSNumber numberWithInt:NSUnderlineStyleSingle];
attributesDict = @{NSUnderlineStyleAttributeName : underline, NSForegroundColorAttributeName : [UIColor blueColor]};
attString = [[NSMutableAttributedString alloc] initWithString:url.absoluteString attributes:attributesDict];
[attString drawInRect:frameRect];
CGContextRestoreGState(context);
}
这个方法的作用是:
- 获取当前上下文并对提供的矩形应用转换,以便获得一个在将框
UIGraphicsSetPDFContextURLForRect
标记为可点击时可以工作的矩形
xformRect
使用上述方法将新矩形 ( ) 标记为可点击
- 保存当前上下文,以便以后所做的任何事情(颜色、大小、属性等)都不会在当前上下文中保持持久性
- 在提供的矩形中绘制文本(现在使用 UIKit 坐标系)
- 恢复上下文 GState