UIGraphicsGetCurrentContext似乎返回零
我试图在这里将各个PDF页面转换成PNG,直到UIGraphicsGetCurrentContext突然开始返回nil为止,这个工作是完美的。
我试图在这里追溯我的步骤,但是我不太确定我知道发生了什么事情。 我的框架不是0,我看到可能会造成这个问题,但除了这一切“看起来”是正确的。
这是我的代码的开始。
_pdf = CGPDFDocumentCreateWithURL((__bridge CFURLRef)_pdfFileUrl); CGPDFPageRef myPageRef = CGPDFDocumentGetPage(_pdf, pageNumber); CGRect aRect = CGPDFPageGetBoxRect(myPageRef, kCGPDFCropBox); CGRect bRect = CGRectMake(0, 0, height / (aRect.size.height / aRect.size.width), height); UIGraphicsBeginImageContext(bRect.size); CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSaveGState(context);
任何人有任何想法可能会导致无上下文?
事实上,CGContextRef对象可以在drawRect方法中设置后重用。 重点是 – 在任何地方使用它之前,您都需要将Context推入堆栈。 否则,当前上下文将是0x0
1.添加
@interface RenderView : UIView { CGContextRef visualContext; BOOL renderFirst; }
2.在你的@implementation中,在视图出现在屏幕上之前,先将renderFirst设置为TRUE,然后:
-(void) drawRect:(CGRect) rect { if (renderFirst) { visualContext = UIGraphicsGetCurrentContext(); renderFirst = FALSE; } }
3.设置上下文之后渲染一些东西。
-(void) renderSomethingToRect:(CGRect) rect { UIGraphicsPushContext(visualContext); // For instance UIGraphicsPushContext(visualContext); CGContextSetRGBFillColor(visualContext, 1.0, 1.0, 1.0, 1.0); CGContextFillRect(visualContext, rect); }
这里是一个与线程案例完全匹配的例子:
- (void) drawImage: (CGImageRef) img inRect: (CGRect) aRect { UIGraphicsBeginImageContextWithOptions(aRect.size, NO, 0.0); visualContext = UIGraphicsGetCurrentContext(); CGContextConcatCTM(visualContext, CGAffineTransformMakeTranslation(-aRect.origin.x, -aRect.origin.y)); CGContextClipToRect(visualContext, aRect); CGContextDrawImage(visualContext, aRect, img); // this can be used for drawing image on CALayer self.layer.contents = (__bridge id) img; [CATransaction flush]; UIGraphicsEndImageContext(); }
和从这个post之前采取的上下文绘制图像:
-(void) drawImageOnContext: (CGImageRef) someIm onPosition: (CGPoint) aPos { UIGraphicsPushContext(visualContext); CGContextDrawImage(visualContext, CGRectMake(aPos.x, aPos.y, someIm.size.width, someIm.size.height), someIm.CGImage); }
不要调用UIGraphicsPopContext()函数,直到需要上下文来渲染对象。
当调用方法结束时,似乎CGContextRef自动从graphics堆栈的顶部被移除。
无论如何,这个例子似乎是一种黑客 – 而不是由苹果计划和提出的。 该解决scheme非常不稳定,只能在屏幕顶部的一个UIView中直接调用方法消息。 在“执行select”调用的情况下,上下文不会在屏幕上显示任何结果。 所以,我build议使用CALayer作为屏幕目标的渲染,而不是直接的graphics上下文使用。
希望能帮助到你。
它不必从“drawRect”中调用。 你也可以在“UIGraphicsBeginImageContext(bRect.size);”之后调用它。
检查以下行
UIGraphicsBeginImageContext(bRect.size);
如果bRect.size不是0,0
在我的情况下,这是为什么返回的下一行上下文是null的原因。
你是否调用drawRect方法内的UIGraphicsGetCurrentContext()? 据我所知,只能在drawRect中调用,否则返回nil。
- 将应用程序部署到App Store后,Worklight 6.1“拒绝访问受保护的服务”
- NSSortDescriptor不被调用
- 如何限制coredata中空值的输入?
- '无法在descriptionForLayoutAttribute_layoutItem_coefficient中创build描述。 有些东西是零“
- 在iOS应用程序中捕获签名
- 如何为AVWriter写入设置CMSampleBuffer的时间戳
- Apple Watchkit模拟器问题:SPErrorInvalidBundleNoGizmoBinaryMessage
- 在Build中dynamic设置Xcode 4中的iOS Bundle Display Name
- 在顶点着色器中声明常量而不是文字。 标准的做法,还是不必要的严格?