わかりました、なぜそれが機能しなかったのかを理解することができました。
コア グラフィックス コンテキストは、原点がページの左下にあるのに対し、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
前述の方法を使用して、新しい rect ( ) をクリック可能としてマークします。
- 現在のコンテキストを保存して、後で行われること (色、サイズ、属性など) が現在のコンテキストに永続的に残らないようにする
- 提供された四角形にテキストを描画します(現在はUIKit座標系を使用しています)
- コンテキスト GState を復元する