@implementation QuartzView
- (id)initWithFrame:(CGRect)aRect
{
self = [super initWithFrame:aRect];
if(self != nil)
{
self.backgroundColor = [UIColor blackColor];
self.opaque = YES;
self.clearsContextBeforeDrawing = YES;
}
return self;
}
-(void)drawInContext:(CGContextRef)context
{
//do nothing
}
-(void)drawRect:(CGRect)rect
{
// Since we use the CGContextRef a lot, it is convienient for our demonstration classes to do the real work
// inside of a method that passes the context as a parameter, rather than having to query the context
// continuously, or setup that parameter for every subclass.
[self drawInContext:UIGraphicsGetCurrentContext()];
}
@end
@implementation QuartzPDFView
-(id) initWithFile:(NSString*) filename
{
CGRect frame = CGRectMake(0, 0, 640, 960);
if (self = [super initWithFrame:frame])
{
const char * filenamechar = [filename UTF8String];
CFURLRef pdfURL = CFBundleCopyResourceURL(CFBundleGetMainBundle(),CFStringCreateWithCString(NULL,filenamechar,kCFStringEncodingUTF8),NULL,NULL);
pdf = CGPDFDocumentCreateWithURL((CFURLRef)pdfURL);
assert(pdf);
CFRelease(pdfURL);
mpdfpagecount = 1;
endpage = CGPDFDocumentGetNumberOfPages(pdf);
}
return self;
}
-(void)dealloc
{
CGPDFDocumentRelease(pdf);
[super dealloc];
}
// 采用绘图的方法绘制pdf的文本文件。
-(void)drawInContext:(CGContextRef)context
{
// PDF page drawing expects a Lower-Left coordinate system, so we flip the coordinate system
// before we start drawing.
CGContextTranslateCTM(context, 0.0, self.bounds.size.height );
CGContextScaleCTM(context, 1.0, -1.0);
// Grab the first PDF page
CGPDFPageRef page = CGPDFDocumentGetPage(pdf, (size_t)mpdfpagecount);
// We're about to modify the context CTM to draw the PDF page where we want it, so save the graphics state in case we want to do more drawing
CGContextSaveGState(context);
// CGPDFPageGetDrawingTransform provides an easy way to get the transform for a PDF page. It will scale down to fit, including any
// base rotations necessary to display the PDF page correctly.
CGAffineTransform pdfTransform = CGPDFPageGetDrawingTransform(page, kCGPDFCropBox, self.bounds, 0, true);
// And apply the transform.
CGContextConcatCTM(context, pdfTransform);
// Finally, we draw the page and restore the graphics state for further manipulations!
CGContextDrawPDFPage(context, page);
CGContextRestoreGState(context);
}
@end