0

私は現在、FTCoreTextモジュールの編集に取り組んでおり、Webから直接画像を読み込んで、CoreTextで表示しています。
そこで、https://github.com/FuerteInternational/FTCoreText/blob/master/FTCoreText/classes/FTCoreTextView.m#L1149を編集して、AFNetworkingのUIImageViewカテゴリを使用しました。今、私はインターネットから画像をダウンロードしてビューに描画するブロックを使用します。画像は描画されていますが、コンテキストにエラーがあります:

Aug 13 05:34:50 Yohann-iPhone CCFA[9878] <Error>: CGContextSaveGState: invalid context 0x0
Aug 13 05:34:50 Yohann-iPhone CCFA[9878] <Error>: CGContextSaveGState: invalid context 0x0
Aug 13 05:34:50 Yohann-iPhone CCFA[9878] <Error>: CGContextSetBlendMode: invalid context 0x0
Aug 13 05:34:50 Yohann-iPhone CCFA[9878] <Error>: CGContextSetAlpha: invalid context 0x0
Aug 13 05:34:50 Yohann-iPhone CCFA[9878] <Error>: CGContextTranslateCTM: invalid context 0x0
Aug 13 05:34:50 Yohann-iPhone CCFA[9878] <Error>: CGContextScaleCTM: invalid context 0x0
Aug 13 05:34:50 Yohann-iPhone CCFA[9878] <Error>: CGContextDrawImage: invalid context 0x0
Aug 13 05:34:50 Yohann-iPhone CCFA[9878] <Error>: CGContextRestoreGState: invalid context 0x0

あなたはここで私のブロックを見ることができます:

UIImageView *imgNode = [[UIImageView alloc] init];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:imageNode.imageName]];
[imgNode setImageWithURLRequest:request placeholderImage:[UIImage imageNamed:@"rien.gif"] success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
                if (alignment == kCTRightTextAlignment) x = (self.frame.size.width - image.size.width);
                if (alignment == kCTCenterTextAlignment) x = ((self.frame.size.width - image.size.width) / 2);

                frame = CGRectMake(x, (lineFrame.origin.y - image.size.height), image.size.width, image.size.height);


                if (alignment != kCTCenterTextAlignment) frame.origin.x = (alignment == kCTLeftTextAlignment)? insets.left : (self.frame.size.width - image.size.width - insets.right);
                frame.origin.y += insets.top;
                frame.size.width = ((insets.left + insets.right + image.size.width ) > self.frame.size.width)? self.frame.size.width : image.size.width;


                frame = CGRectMake((((320-2*20)-image.size.width)/2), frame.origin.y, image.size.width, image.size.height);
                NSLog(@"Frame : %f %f", frame.size.width, frame.size.height);
                NSLog(@"Image : %f %f", image.size.width, image.size.height);
                CGContextRef context = UIGraphicsGetCurrentContext();                       
                CGContextSaveGState(context);

                [image drawInRect:CGRectIntegral(frame)];
            } failure:nil];
            [imgNode.image drawInRect:CGRectIntegral(frame)];

そしてもちろん、私はあなたにコード全体をペーストビンします:http: //pastebin.com/Qj6PtEFj

私はあなたが私を助けることができることを願っています:)!

4

2 に答える 2

1

同様の問題がありUIGraphicsPushContext(context)/UIGraphicsPushContext(context)、描画コードで解決しました。で作成されたコンテキスト

CGColorSpaceRef space = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(NULL, width, height, 8, 0, space, kCGImageAlphaPremultipliedLast);
于 2013-03-26T22:45:03.823 に答える
0

次のようなエラーが発生した場合は、単なる提案です

「CGContextSaveGState: 無効なコンテキスト 0x0」</p>

正しいコンテキストで作業していないことを意味します。それUIGraphicsGetCurrentContext()は正しくありません。描画が発生した元のコンテキストを取得し、完全なブロックに渡します。

于 2012-08-24T01:59:04.873 に答える