From c5995b99b48c39acf5ef69cf836b01b58072c108 Mon Sep 17 00:00:00 2001 From: Zachary Waldowski Date: Tue, 21 Feb 2012 08:36:08 -0500 Subject: [PATCH] Clean up demo and methods. --- .DS_Store | Bin 0 -> 6148 bytes Classes/UIImage_PDF_exampleAppDelegate.h | 22 - Classes/UIImage_PDF_exampleAppDelegate.m | 88 ---- Classes/UIImage_PDF_exampleViewController.h | 19 - Classes/UIImage_PDF_exampleViewController.m | 105 ----- .../MainWindow.xib | 122 +++-- Demo/PDFExampleViewController.h | 14 + Demo/PDFExampleViewController.m | 70 +++ .../PDFExample_Info.plist | 0 .../PDFExample_Prefix.pch | 0 YingYang.pdf => Demo/YingYang.pdf | Bin main.m => Demo/main.m | 8 +- MainWindow.xib | 444 ------------------ .../project.pbxproj | 119 ++--- .../contents.xcworkspacedata | 7 + .../UserInterfaceState.xcuserstate | Bin 0 -> 85031 bytes .../WorkspaceSettings.xcsettings | 10 + .../xcdebugger/Breakpoints.xcbkptlist | 21 + .../xcschemes/PDFExample.xcscheme | 84 ++++ .../xcschemes/xcschememanagement.plist | 22 + PDFView.h | 14 + PDFView.m | 93 ++++ UIImage+PDF.h | 15 + UIImage+PDF.m | 49 ++ UIImage+PDF/PDFView.h | 21 - UIImage+PDF/PDFView.m | 101 ---- UIImage+PDF/UIImage+PDF.h | 20 - UIImage+PDF/UIImage+PDF.m | 54 --- UIImage+PDF/UIView+Image.h | 17 - UIImage+PDF/UIView+Image.m | 44 -- 30 files changed, 520 insertions(+), 1063 deletions(-) create mode 100644 .DS_Store delete mode 100644 Classes/UIImage_PDF_exampleAppDelegate.h delete mode 100644 Classes/UIImage_PDF_exampleAppDelegate.m delete mode 100644 Classes/UIImage_PDF_exampleViewController.h delete mode 100644 Classes/UIImage_PDF_exampleViewController.m rename UIImage_PDF_exampleViewController.xib => Demo/MainWindow.xib (57%) create mode 100644 Demo/PDFExampleViewController.h create mode 100644 Demo/PDFExampleViewController.m rename UIImage_PDF_example-Info.plist => Demo/PDFExample_Info.plist (100%) rename UIImage_PDF_example_Prefix.pch => Demo/PDFExample_Prefix.pch (100%) rename YingYang.pdf => Demo/YingYang.pdf (100%) rename main.m => Demo/main.m (54%) delete mode 100644 MainWindow.xib rename {UIImage+PDF example.xcodeproj => PDFExample.xcodeproj}/project.pbxproj (61%) create mode 100644 PDFExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 PDFExample.xcodeproj/project.xcworkspace/xcuserdata/zwaldowski.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 PDFExample.xcodeproj/project.xcworkspace/xcuserdata/zwaldowski.xcuserdatad/WorkspaceSettings.xcsettings create mode 100644 PDFExample.xcodeproj/xcuserdata/zwaldowski.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist create mode 100644 PDFExample.xcodeproj/xcuserdata/zwaldowski.xcuserdatad/xcschemes/PDFExample.xcscheme create mode 100644 PDFExample.xcodeproj/xcuserdata/zwaldowski.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 PDFView.h create mode 100644 PDFView.m create mode 100644 UIImage+PDF.h create mode 100644 UIImage+PDF.m delete mode 100644 UIImage+PDF/PDFView.h delete mode 100644 UIImage+PDF/PDFView.m delete mode 100644 UIImage+PDF/UIImage+PDF.h delete mode 100644 UIImage+PDF/UIImage+PDF.m delete mode 100644 UIImage+PDF/UIView+Image.h delete mode 100644 UIImage+PDF/UIView+Image.m diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0 - -@class UIImage_PDF_exampleViewController; - -@interface UIImage_PDF_exampleAppDelegate : NSObject { - UIWindow *window; - UIImage_PDF_exampleViewController *viewController; -} - -@property (nonatomic, retain) IBOutlet UIWindow *window; -@property (nonatomic, retain) IBOutlet UIImage_PDF_exampleViewController *viewController; - -@end - diff --git a/Classes/UIImage_PDF_exampleAppDelegate.m b/Classes/UIImage_PDF_exampleAppDelegate.m deleted file mode 100644 index 9282cd4..0000000 --- a/Classes/UIImage_PDF_exampleAppDelegate.m +++ /dev/null @@ -1,88 +0,0 @@ -// -// UIImage_PDF_exampleAppDelegate.m -// UIImage+PDF example -// -// Created by Nigel Barber on 15/10/2011. -// Copyright 2011 Mindbrix. All rights reserved. -// - -#import "UIImage_PDF_exampleAppDelegate.h" -#import "UIImage_PDF_exampleViewController.h" - -@implementation UIImage_PDF_exampleAppDelegate - -@synthesize window; -@synthesize viewController; - - -#pragma mark - -#pragma mark Application lifecycle - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - - // Override point for customization after application launch. - - // Set the view controller as the window's root view controller and display. - self.window.rootViewController = self.viewController; - [self.window makeKeyAndVisible]; - - return YES; -} - - -- (void)applicationWillResignActive:(UIApplication *)application { - /* - Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. - Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. - */ -} - - -- (void)applicationDidEnterBackground:(UIApplication *)application { - /* - Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. - If your application supports background execution, called instead of applicationWillTerminate: when the user quits. - */ -} - - -- (void)applicationWillEnterForeground:(UIApplication *)application { - /* - Called as part of transition from the background to the inactive state: here you can undo many of the changes made on entering the background. - */ -} - - -- (void)applicationDidBecomeActive:(UIApplication *)application { - /* - Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. - */ -} - - -- (void)applicationWillTerminate:(UIApplication *)application { - /* - Called when the application is about to terminate. - See also applicationDidEnterBackground:. - */ -} - - -#pragma mark - -#pragma mark Memory management - -- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application { - /* - Free up as much memory as possible by purging cached data objects that can be recreated (or reloaded from disk) later. - */ -} - - -- (void)dealloc { - [viewController release]; - [window release]; - [super dealloc]; -} - - -@end diff --git a/Classes/UIImage_PDF_exampleViewController.h b/Classes/UIImage_PDF_exampleViewController.h deleted file mode 100644 index 2a52bd7..0000000 --- a/Classes/UIImage_PDF_exampleViewController.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// UIImage_PDF_exampleViewController.h -// UIImage+PDF example -// -// Created by Nigel Barber on 15/10/2011. -// Copyright 2011 Mindbrix. All rights reserved. -// - -#import - -#import "UIImage+PDF.h" - - -@interface UIImage_PDF_exampleViewController : UIViewController { - -} - -@end - diff --git a/Classes/UIImage_PDF_exampleViewController.m b/Classes/UIImage_PDF_exampleViewController.m deleted file mode 100644 index 5f24636..0000000 --- a/Classes/UIImage_PDF_exampleViewController.m +++ /dev/null @@ -1,105 +0,0 @@ -// -// UIImage_PDF_exampleViewController.m -// UIImage+PDF example -// -// Created by Nigel Barber on 15/10/2011. -// Copyright 2011 Mindbrix. All rights reserved. -// - -#import "UIImage_PDF_exampleViewController.h" - -@implementation UIImage_PDF_exampleViewController - - - -/* -// The designated initializer. Override to perform setup that is required before the view is loaded. -- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { - self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; - if (self) { - // Custom initialization - } - return self; -} -*/ - -/* -// Implement loadView to create a view hierarchy programmatically, without using a nib. -- (void)loadView { -} -*/ - - -/**/ -// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. -- (void)viewDidLoad { - [super viewDidLoad]; - - - UIImageView *imageView = [[ UIImageView alloc ] initWithImage:[ UIImage originalSizeImageWithPDFNamed:@"YingYang.pdf" ]]; - imageView.center = self.view.center; - [ self.view addSubview:imageView ]; - [ imageView release ]; - - - /* Draw a growing line of buttons to demonstate the scaling - */ - float kInset = 4; - float kSpacing = 10; - float buttonY = kSpacing; - - for( float i = 0; i < 8; i++ ) - { - /* Always round up coordinates before passing them into UIKit - */ - float buttonWidth = ceilf( 22 * sqrtf( i + 1 )); - - CGSize buttonSize = CGSizeMake( buttonWidth, buttonWidth ); - UIButton *yingYangButton = [ UIButton buttonWithType:UIButtonTypeRoundedRect ]; - yingYangButton.frame = CGRectMake( kSpacing, buttonY, buttonSize.width, buttonSize.height ); - - /* Inset the button image - */ - CGSize imageSize = CGSizeMake( buttonSize.width - kInset * 2, buttonSize.height - kInset * 2 ); - - /* Set the button image from the PDF asset. - */ - [ yingYangButton setImage:[ UIImage imageWithPDFNamed:@"YingYang.pdf" atSize:imageSize ] forState:UIControlStateNormal ]; - - //[ yingYangButton setImage:[ UIImage imageWithPDFNamed:@"YingYang.pdf" atHeight:imageSize.height ] forState:UIControlStateNormal ]; - //[ yingYangButton setImage:[ UIImage imageWithPDFNamed:@"YingYang.pdf" atWidth:imageSize.width ] forState:UIControlStateNormal ]; - - [ self.view addSubview:yingYangButton ]; - - buttonY += buttonWidth + kSpacing; - } -} - - - -/* -// Override to allow orientations other than the default portrait orientation. -- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { - // Return YES for supported orientations - return (interfaceOrientation == UIInterfaceOrientationPortrait); -} -*/ - -- (void)didReceiveMemoryWarning { - // Releases the view if it doesn't have a superview. - [super didReceiveMemoryWarning]; - - // Release any cached data, images, etc that aren't in use. -} - -- (void)viewDidUnload { - // Release any retained subviews of the main view. - // e.g. self.myOutlet = nil; -} - - -- (void)dealloc { - [super dealloc]; -} - -@end diff --git a/UIImage_PDF_exampleViewController.xib b/Demo/MainWindow.xib similarity index 57% rename from UIImage_PDF_exampleViewController.xib rename to Demo/MainWindow.xib index e45f6cc..1a64182 100644 --- a/UIImage_PDF_exampleViewController.xib +++ b/Demo/MainWindow.xib @@ -1,57 +1,65 @@ - 800 - 10C540 - 759 - 1038.25 - 458.00 + 1280 + 11D50 + 1938 + 1138.32 + 568.00 com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 77 + 933 - + YES - + IBProxyObject + IBUIViewController + IBUIWindow YES com.apple.InterfaceBuilder.IBCocoaTouchPlugin - YES - - YES - - - YES - + PluginDependencyRecalculationVersion + YES - + IBFilesOwner IBCocoaTouchFramework - + IBFirstResponder IBCocoaTouchFramework - + + + + 1 + 1 + + IBCocoaTouchFramework + NO + + - 274 - {320, 460} + 292 + {320, 480} + + - 3 - MC43NQA - - 2 - + 1 + MSAxIDEAA + NO NO IBCocoaTouchFramework + YES + YES @@ -59,11 +67,11 @@ YES - view - - + rootViewController + + - 7 + 17 @@ -71,24 +79,34 @@ YES 0 - + + YES + -1 - + File's Owner -2 - + - 6 - + 10 + + + YES + + + + + 12 + @@ -98,59 +116,63 @@ YES -1.CustomClassName + -1.IBPluginDependency -2.CustomClassName - 6.IBEditorWindowLastContentRect - 6.IBPluginDependency + -2.IBPluginDependency + 10.CustomClassName + 10.IBPluginDependency + 12.IBPluginDependency YES - UIImage_PDF_exampleViewController + UIApplication + com.apple.InterfaceBuilder.IBCocoaTouchPlugin UIResponder - {{239, 654}, {320, 480}} + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + PDFExampleViewController + com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin YES - - YES - + YES - - YES - + - 7 + 17 YES - UIImage_PDF_exampleViewController + PDFExampleViewController UIViewController IBProjectSource - Classes/UIImage_PDF_exampleViewController.h + ./Classes/PDFExampleViewController.h 0 IBCocoaTouchFramework + + com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS + + com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 YES - UIImage+PDF example.xcodeproj 3 - 77 - + 933 diff --git a/Demo/PDFExampleViewController.h b/Demo/PDFExampleViewController.h new file mode 100644 index 0000000..c95e918 --- /dev/null +++ b/Demo/PDFExampleViewController.h @@ -0,0 +1,14 @@ +// +// PDFExampleViewController.h +// UIImage+PDF Example +// +// Created by Nigel Barber on 15/10/2011. +// Copyright 2011 Mindbrix. All rights reserved. +// + +#import "UIImage+PDF.h" + +@interface PDFExampleViewController : UIViewController + +@end + diff --git a/Demo/PDFExampleViewController.m b/Demo/PDFExampleViewController.m new file mode 100644 index 0000000..ba1ada6 --- /dev/null +++ b/Demo/PDFExampleViewController.m @@ -0,0 +1,70 @@ +// +// PDFExampleViewController.m +// UIImage+PDF example +// +// Created by Nigel Barber on 15/10/2011. +// Copyright 2011 Mindbrix. All rights reserved. +// + +#import "PDFExampleViewController.h" + +@implementation PDFExampleViewController + + + +/* +// The designated initializer. Override to perform setup that is required before the view is loaded. +- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { + self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; + if (self) { + // Custom initialization + } + return self; +} +*/ + +/* +// Implement loadView to create a view hierarchy programmatically, without using a nib. +- (void)loadView { +} +*/ + + +/**/ +// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. +- (void)viewDidLoad { + [super viewDidLoad]; + + UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageWithPDFNamed:@"YingYang"]]; + imageView.center = self.view.center; + [self.view addSubview:imageView]; + + // Draw a growing line of buttons to demonstate the scaling + float kInset = 4; + float kSpacing = 10; + float buttonY = kSpacing; + + for (float i = 0; i < 8; i++ ) { + // Always round up coordinates before passing them into UIKit + float buttonWidth = ceilf( 22 * sqrtf( i + 1 )); + + CGSize buttonSize = CGSizeMake( buttonWidth, buttonWidth ); + UIButton *yingYangButton = [ UIButton buttonWithType:UIButtonTypeRoundedRect ]; + yingYangButton.frame = CGRectMake( kSpacing, buttonY, buttonSize.width, buttonSize.height ); + + // Inset the button image + CGSize imageSize = CGSizeMake( buttonSize.width - kInset * 2, buttonSize.height - kInset * 2 ); + + // Set the button image from the PDF asset. + [ yingYangButton setImage:[UIImage imageWithPDFNamed:@"YingYang" size:imageSize] forState:UIControlStateNormal ]; + + //[ yingYangButton setImage:[ UIImage imageWithPDFNamed:@"YingYang.pdf" height:imageSize.height ] forState:UIControlStateNormal ]; + //[ yingYangButton setImage:[ UIImage imageWithPDFNamed:@"YingYang.pdf" width:imageSize.width ] forState:UIControlStateNormal ]; + + [ self.view addSubview:yingYangButton ]; + + buttonY += buttonWidth + kSpacing; + } +} + +@end diff --git a/UIImage_PDF_example-Info.plist b/Demo/PDFExample_Info.plist similarity index 100% rename from UIImage_PDF_example-Info.plist rename to Demo/PDFExample_Info.plist diff --git a/UIImage_PDF_example_Prefix.pch b/Demo/PDFExample_Prefix.pch similarity index 100% rename from UIImage_PDF_example_Prefix.pch rename to Demo/PDFExample_Prefix.pch diff --git a/YingYang.pdf b/Demo/YingYang.pdf similarity index 100% rename from YingYang.pdf rename to Demo/YingYang.pdf diff --git a/main.m b/Demo/main.m similarity index 54% rename from main.m rename to Demo/main.m index 86b7226..d5f8850 100644 --- a/main.m +++ b/Demo/main.m @@ -9,9 +9,7 @@ #import int main(int argc, char *argv[]) { - - NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; - int retVal = UIApplicationMain(argc, argv, nil, nil); - [pool release]; - return retVal; + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, nil); + } } diff --git a/MainWindow.xib b/MainWindow.xib deleted file mode 100644 index 26989ca..0000000 --- a/MainWindow.xib +++ /dev/null @@ -1,444 +0,0 @@ - - - - 1024 - 10D571 - 786 - 1038.29 - 460.00 - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 112 - - - YES - - - - YES - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - YES - - YES - - - YES - - - - YES - - IBFilesOwner - IBCocoaTouchFramework - - - IBFirstResponder - IBCocoaTouchFramework - - - IBCocoaTouchFramework - - - UIImage_PDF_exampleViewController - - - 1 - - IBCocoaTouchFramework - NO - - - - 292 - {320, 480} - - 1 - MSAxIDEAA - - NO - NO - - IBCocoaTouchFramework - YES - - - - - YES - - - delegate - - - - 4 - - - - viewController - - - - 11 - - - - window - - - - 14 - - - - - YES - - 0 - - - - - - -1 - - - File's Owner - - - 3 - - - UIImage_PDF_example App Delegate - - - -2 - - - - - 10 - - - - - 12 - - - - - - - YES - - YES - -1.CustomClassName - -2.CustomClassName - 10.CustomClassName - 10.IBEditorWindowLastContentRect - 10.IBPluginDependency - 12.IBEditorWindowLastContentRect - 12.IBPluginDependency - 3.CustomClassName - 3.IBPluginDependency - - - YES - UIApplication - UIResponder - UIImage_PDF_exampleViewController - {{234, 376}, {320, 480}} - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - {{525, 346}, {320, 480}} - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - UIImage_PDF_exampleAppDelegate - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - YES - - - YES - - - - - YES - - - YES - - - - 15 - - - - YES - - UIWindow - UIView - - IBUserSource - - - - - UIImage_PDF_exampleAppDelegate - NSObject - - YES - - YES - viewController - window - - - YES - UIImage_PDF_exampleViewController - UIWindow - - - - YES - - YES - viewController - window - - - YES - - viewController - UIImage_PDF_exampleViewController - - - window - UIWindow - - - - - IBProjectSource - Classes/UIImage_PDF_exampleAppDelegate.h - - - - UIImage_PDF_exampleAppDelegate - NSObject - - IBUserSource - - - - - UIImage_PDF_exampleViewController - UIViewController - - IBProjectSource - Classes/UIImage_PDF_exampleViewController.h - - - - - YES - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSError.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSFileManager.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSKeyValueCoding.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSKeyValueObserving.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSKeyedArchiver.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSObject.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSRunLoop.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSThread.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSURL.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSURLConnection.h - - - - NSObject - - IBFrameworkSource - UIKit.framework/Headers/UIAccessibility.h - - - - NSObject - - IBFrameworkSource - UIKit.framework/Headers/UINibLoading.h - - - - NSObject - - IBFrameworkSource - UIKit.framework/Headers/UIResponder.h - - - - UIApplication - UIResponder - - IBFrameworkSource - UIKit.framework/Headers/UIApplication.h - - - - UIResponder - NSObject - - - - UISearchBar - UIView - - IBFrameworkSource - UIKit.framework/Headers/UISearchBar.h - - - - UISearchDisplayController - NSObject - - IBFrameworkSource - UIKit.framework/Headers/UISearchDisplayController.h - - - - UIView - - IBFrameworkSource - UIKit.framework/Headers/UITextField.h - - - - UIView - UIResponder - - IBFrameworkSource - UIKit.framework/Headers/UIView.h - - - - UIViewController - - IBFrameworkSource - UIKit.framework/Headers/UINavigationController.h - - - - UIViewController - - IBFrameworkSource - UIKit.framework/Headers/UIPopoverController.h - - - - UIViewController - - IBFrameworkSource - UIKit.framework/Headers/UISplitViewController.h - - - - UIViewController - - IBFrameworkSource - UIKit.framework/Headers/UITabBarController.h - - - - UIViewController - UIResponder - - IBFrameworkSource - UIKit.framework/Headers/UIViewController.h - - - - UIWindow - UIView - - IBFrameworkSource - UIKit.framework/Headers/UIWindow.h - - - - - 0 - IBCocoaTouchFramework - - com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS - - - - com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 - - - YES - UIImage+PDF example.xcodeproj - 3 - 112 - - diff --git a/UIImage+PDF example.xcodeproj/project.pbxproj b/PDFExample.xcodeproj/project.pbxproj similarity index 61% rename from UIImage+PDF example.xcodeproj/project.pbxproj rename to PDFExample.xcodeproj/project.pbxproj index c6136bd..bba1efc 100755 --- a/UIImage+PDF example.xcodeproj/project.pbxproj +++ b/PDFExample.xcodeproj/project.pbxproj @@ -7,41 +7,33 @@ objects = { /* Begin PBXBuildFile section */ - 1D3623260D0F684500981E51 /* UIImage_PDF_exampleAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D3623250D0F684500981E51 /* UIImage_PDF_exampleAppDelegate.m */; }; 1D60589B0D05DD56006BFB54 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; }; 1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; }; 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; }; 288765A50DF7441C002DB57D /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 288765A40DF7441C002DB57D /* CoreGraphics.framework */; }; - 2899E5220DE3E06400AC0155 /* UIImage_PDF_exampleViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2899E5210DE3E06400AC0155 /* UIImage_PDF_exampleViewController.xib */; }; 28AD733F0D9D9553002E5188 /* MainWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 28AD733E0D9D9553002E5188 /* MainWindow.xib */; }; - 28D7ACF80DDB3853001CB0EB /* UIImage_PDF_exampleViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 28D7ACF70DDB3853001CB0EB /* UIImage_PDF_exampleViewController.m */; }; + 28D7ACF80DDB3853001CB0EB /* PDFExampleViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 28D7ACF70DDB3853001CB0EB /* PDFExampleViewController.m */; }; + 6C77C34314E5A88A00B7C0A1 /* YingYang.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6C77C34114E5A88A00B7C0A1 /* YingYang.pdf */; }; A6685B1D1449C642006A3A42 /* PDFView.m in Sources */ = {isa = PBXBuildFile; fileRef = A6685B181449C642006A3A42 /* PDFView.m */; }; A6685B1E1449C642006A3A42 /* UIImage+PDF.m in Sources */ = {isa = PBXBuildFile; fileRef = A6685B1A1449C642006A3A42 /* UIImage+PDF.m */; }; - A6685B1F1449C642006A3A42 /* UIView+Image.m in Sources */ = {isa = PBXBuildFile; fileRef = A6685B1C1449C642006A3A42 /* UIView+Image.m */; }; - A6685B3B1449CC1C006A3A42 /* YingYang.pdf in Resources */ = {isa = PBXBuildFile; fileRef = A6685B3A1449CC1C006A3A42 /* YingYang.pdf */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ 1D30AB110D05D00D00671497 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - 1D3623240D0F684500981E51 /* UIImage_PDF_exampleAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIImage_PDF_exampleAppDelegate.h; sourceTree = ""; }; - 1D3623250D0F684500981E51 /* UIImage_PDF_exampleAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIImage_PDF_exampleAppDelegate.m; sourceTree = ""; }; - 1D6058910D05DD3D006BFB54 /* UIImage+PDF example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "UIImage+PDF example.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 1D6058910D05DD3D006BFB54 /* PDFExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PDFExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 288765A40DF7441C002DB57D /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; - 2899E5210DE3E06400AC0155 /* UIImage_PDF_exampleViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = UIImage_PDF_exampleViewController.xib; sourceTree = ""; }; 28AD733E0D9D9553002E5188 /* MainWindow.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MainWindow.xib; sourceTree = ""; }; - 28D7ACF60DDB3853001CB0EB /* UIImage_PDF_exampleViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIImage_PDF_exampleViewController.h; sourceTree = ""; }; - 28D7ACF70DDB3853001CB0EB /* UIImage_PDF_exampleViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIImage_PDF_exampleViewController.m; sourceTree = ""; }; + 28D7ACF60DDB3853001CB0EB /* PDFExampleViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PDFExampleViewController.h; sourceTree = ""; }; + 28D7ACF70DDB3853001CB0EB /* PDFExampleViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PDFExampleViewController.m; sourceTree = ""; }; 29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - 32CA4F630368D1EE00C91783 /* UIImage_PDF_example_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIImage_PDF_example_Prefix.pch; sourceTree = ""; }; - 8D1107310486CEB800E47090 /* UIImage_PDF_example-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "UIImage_PDF_example-Info.plist"; plistStructureDefinitionIdentifier = "com.apple.xcode.plist.structure-definition.iphone.info-plist"; sourceTree = ""; }; + 32CA4F630368D1EE00C91783 /* PDFExample_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PDFExample_Prefix.pch; sourceTree = ""; }; + 6C77C34114E5A88A00B7C0A1 /* YingYang.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = YingYang.pdf; sourceTree = ""; }; + 8D1107310486CEB800E47090 /* PDFExample_Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = PDFExample_Info.plist; plistStructureDefinitionIdentifier = "com.apple.xcode.plist.structure-definition.iphone.info-plist"; sourceTree = ""; }; A6685B171449C642006A3A42 /* PDFView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PDFView.h; sourceTree = ""; }; A6685B181449C642006A3A42 /* PDFView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PDFView.m; sourceTree = ""; }; A6685B191449C642006A3A42 /* UIImage+PDF.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+PDF.h"; sourceTree = ""; }; A6685B1A1449C642006A3A42 /* UIImage+PDF.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+PDF.m"; sourceTree = ""; }; - A6685B1B1449C642006A3A42 /* UIView+Image.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+Image.h"; sourceTree = ""; }; - A6685B1C1449C642006A3A42 /* UIView+Image.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+Image.m"; sourceTree = ""; }; - A6685B3A1449CC1C006A3A42 /* YingYang.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = YingYang.pdf; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -58,21 +50,24 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 080E96DDFE201D6D7F000001 /* Classes */ = { + 080E96DDFE201D6D7F000001 /* Demo */ = { isa = PBXGroup; children = ( - 1D3623240D0F684500981E51 /* UIImage_PDF_exampleAppDelegate.h */, - 1D3623250D0F684500981E51 /* UIImage_PDF_exampleAppDelegate.m */, - 28D7ACF60DDB3853001CB0EB /* UIImage_PDF_exampleViewController.h */, - 28D7ACF70DDB3853001CB0EB /* UIImage_PDF_exampleViewController.m */, + 28D7ACF60DDB3853001CB0EB /* PDFExampleViewController.h */, + 28D7ACF70DDB3853001CB0EB /* PDFExampleViewController.m */, + 32CA4F630368D1EE00C91783 /* PDFExample_Prefix.pch */, + 8D1107310486CEB800E47090 /* PDFExample_Info.plist */, + 28AD733E0D9D9553002E5188 /* MainWindow.xib */, + 6C77C34114E5A88A00B7C0A1 /* YingYang.pdf */, + 29B97316FDCFA39411CA2CEA /* main.m */, ); - path = Classes; + path = Demo; sourceTree = ""; }; 19C28FACFE9D520D11CA2CBB /* Products */ = { isa = PBXGroup; children = ( - 1D6058910D05DD3D006BFB54 /* UIImage+PDF example.app */, + 1D6058910D05DD3D006BFB54 /* PDFExample.app */, ); name = Products; sourceTree = ""; @@ -80,9 +75,11 @@ 29B97314FDCFA39411CA2CEA /* CustomTemplate */ = { isa = PBXGroup; children = ( - A6685B161449C642006A3A42 /* UIImage+PDF */, - 080E96DDFE201D6D7F000001 /* Classes */, - 29B97315FDCFA39411CA2CEA /* Other Sources */, + A6685B171449C642006A3A42 /* PDFView.h */, + A6685B181449C642006A3A42 /* PDFView.m */, + A6685B191449C642006A3A42 /* UIImage+PDF.h */, + A6685B1A1449C642006A3A42 /* UIImage+PDF.m */, + 080E96DDFE201D6D7F000001 /* Demo */, 29B97317FDCFA39411CA2CEA /* Resources */, 29B97323FDCFA39411CA2CEA /* Frameworks */, 19C28FACFE9D520D11CA2CBB /* Products */, @@ -90,22 +87,9 @@ name = CustomTemplate; sourceTree = ""; }; - 29B97315FDCFA39411CA2CEA /* Other Sources */ = { - isa = PBXGroup; - children = ( - 32CA4F630368D1EE00C91783 /* UIImage_PDF_example_Prefix.pch */, - 29B97316FDCFA39411CA2CEA /* main.m */, - ); - name = "Other Sources"; - sourceTree = ""; - }; 29B97317FDCFA39411CA2CEA /* Resources */ = { isa = PBXGroup; children = ( - A6685B3A1449CC1C006A3A42 /* YingYang.pdf */, - 2899E5210DE3E06400AC0155 /* UIImage_PDF_exampleViewController.xib */, - 28AD733E0D9D9553002E5188 /* MainWindow.xib */, - 8D1107310486CEB800E47090 /* UIImage_PDF_example-Info.plist */, ); name = Resources; sourceTree = ""; @@ -120,25 +104,12 @@ name = Frameworks; sourceTree = ""; }; - A6685B161449C642006A3A42 /* UIImage+PDF */ = { - isa = PBXGroup; - children = ( - A6685B171449C642006A3A42 /* PDFView.h */, - A6685B181449C642006A3A42 /* PDFView.m */, - A6685B191449C642006A3A42 /* UIImage+PDF.h */, - A6685B1A1449C642006A3A42 /* UIImage+PDF.m */, - A6685B1B1449C642006A3A42 /* UIView+Image.h */, - A6685B1C1449C642006A3A42 /* UIView+Image.m */, - ); - path = "UIImage+PDF"; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - 1D6058900D05DD3D006BFB54 /* UIImage+PDF example */ = { + 1D6058900D05DD3D006BFB54 /* PDFExample */ = { isa = PBXNativeTarget; - buildConfigurationList = 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "UIImage+PDF example" */; + buildConfigurationList = 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "PDFExample" */; buildPhases = ( 1D60588D0D05DD3D006BFB54 /* Resources */, 1D60588E0D05DD3D006BFB54 /* Sources */, @@ -148,9 +119,9 @@ ); dependencies = ( ); - name = "UIImage+PDF example"; + name = PDFExample; productName = "UIImage+PDF example"; - productReference = 1D6058910D05DD3D006BFB54 /* UIImage+PDF example.app */; + productReference = 1D6058910D05DD3D006BFB54 /* PDFExample.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ @@ -158,7 +129,10 @@ /* Begin PBXProject section */ 29B97313FDCFA39411CA2CEA /* Project object */ = { isa = PBXProject; - buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "UIImage+PDF example" */; + attributes = { + LastUpgradeCheck = 0420; + }; + buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "PDFExample" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 1; @@ -172,7 +146,7 @@ projectDirPath = ""; projectRoot = ""; targets = ( - 1D6058900D05DD3D006BFB54 /* UIImage+PDF example */, + 1D6058900D05DD3D006BFB54 /* PDFExample */, ); }; /* End PBXProject section */ @@ -183,8 +157,7 @@ buildActionMask = 2147483647; files = ( 28AD733F0D9D9553002E5188 /* MainWindow.xib in Resources */, - 2899E5220DE3E06400AC0155 /* UIImage_PDF_exampleViewController.xib in Resources */, - A6685B3B1449CC1C006A3A42 /* YingYang.pdf in Resources */, + 6C77C34314E5A88A00B7C0A1 /* YingYang.pdf in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -196,11 +169,9 @@ buildActionMask = 2147483647; files = ( 1D60589B0D05DD56006BFB54 /* main.m in Sources */, - 1D3623260D0F684500981E51 /* UIImage_PDF_exampleAppDelegate.m in Sources */, - 28D7ACF80DDB3853001CB0EB /* UIImage_PDF_exampleViewController.m in Sources */, + 28D7ACF80DDB3853001CB0EB /* PDFExampleViewController.m in Sources */, A6685B1D1449C642006A3A42 /* PDFView.m in Sources */, A6685B1E1449C642006A3A42 /* UIImage+PDF.m in Sources */, - A6685B1F1449C642006A3A42 /* UIView+Image.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -211,13 +182,15 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ENABLE_OBJC_ARC = YES; COPY_PHASE_STRIP = NO; GCC_DYNAMIC_NO_PIC = NO; GCC_OPTIMIZATION_LEVEL = 0; GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = UIImage_PDF_example_Prefix.pch; - INFOPLIST_FILE = "UIImage_PDF_example-Info.plist"; - PRODUCT_NAME = "UIImage+PDF example"; + GCC_PREFIX_HEADER = Demo/PDFExample_Prefix.pch; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + INFOPLIST_FILE = Demo/PDFExample_Info.plist; + PRODUCT_NAME = PDFExample; }; name = Debug; }; @@ -225,11 +198,13 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ENABLE_OBJC_ARC = YES; COPY_PHASE_STRIP = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = UIImage_PDF_example_Prefix.pch; - INFOPLIST_FILE = "UIImage_PDF_example-Info.plist"; - PRODUCT_NAME = "UIImage+PDF example"; + GCC_PREFIX_HEADER = Demo/PDFExample_Prefix.pch; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + INFOPLIST_FILE = Demo/PDFExample_Info.plist; + PRODUCT_NAME = PDFExample; VALIDATE_PRODUCT = YES; }; name = Release; @@ -243,7 +218,6 @@ GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 3.1; - PREBINDING = NO; SDKROOT = iphoneos; }; name = Debug; @@ -258,7 +232,6 @@ GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 3.1; OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; - PREBINDING = NO; SDKROOT = iphoneos; }; name = Release; @@ -266,7 +239,7 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "UIImage+PDF example" */ = { + 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "PDFExample" */ = { isa = XCConfigurationList; buildConfigurations = ( 1D6058940D05DD3E006BFB54 /* Debug */, @@ -275,7 +248,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - C01FCF4E08A954540054247B /* Build configuration list for PBXProject "UIImage+PDF example" */ = { + C01FCF4E08A954540054247B /* Build configuration list for PBXProject "PDFExample" */ = { isa = XCConfigurationList; buildConfigurations = ( C01FCF4F08A954540054247B /* Debug */, diff --git a/PDFExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/PDFExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..3b1ac86 --- /dev/null +++ b/PDFExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/PDFExample.xcodeproj/project.xcworkspace/xcuserdata/zwaldowski.xcuserdatad/UserInterfaceState.xcuserstate b/PDFExample.xcodeproj/project.xcworkspace/xcuserdata/zwaldowski.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..1ed7bf27537a0bea5ebde1a530bcd71a39aeb8d7 GIT binary patch literal 85031 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 + + + + IDEWorkspaceUserSettings_HasAskedToTakeAutomaticSnapshotBeforeSignificantChanges + + IDEWorkspaceUserSettings_SnapshotAutomaticallyBeforeSignificantChanges + + + diff --git a/PDFExample.xcodeproj/xcuserdata/zwaldowski.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist b/PDFExample.xcodeproj/xcuserdata/zwaldowski.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist new file mode 100644 index 0000000..40a450d --- /dev/null +++ b/PDFExample.xcodeproj/xcuserdata/zwaldowski.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist @@ -0,0 +1,21 @@ + + + + + + + diff --git a/PDFExample.xcodeproj/xcuserdata/zwaldowski.xcuserdatad/xcschemes/PDFExample.xcscheme b/PDFExample.xcodeproj/xcuserdata/zwaldowski.xcuserdatad/xcschemes/PDFExample.xcscheme new file mode 100644 index 0000000..84111e5 --- /dev/null +++ b/PDFExample.xcodeproj/xcuserdata/zwaldowski.xcuserdatad/xcschemes/PDFExample.xcscheme @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PDFExample.xcodeproj/xcuserdata/zwaldowski.xcuserdatad/xcschemes/xcschememanagement.plist b/PDFExample.xcodeproj/xcuserdata/zwaldowski.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..8f30bc0 --- /dev/null +++ b/PDFExample.xcodeproj/xcuserdata/zwaldowski.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,22 @@ + + + + + SchemeUserState + + PDFExample.xcscheme + + orderHint + 1 + + + SuppressBuildableAutocreation + + 1D6058900D05DD3D006BFB54 + + primary + + + + + diff --git a/PDFView.h b/PDFView.h new file mode 100644 index 0000000..18e54b2 --- /dev/null +++ b/PDFView.h @@ -0,0 +1,14 @@ +// +// PDFView.h +// +// Created by Nigel Barber on 15/10/2011. +// Copyright 2011 Mindbrix Limited. All rights reserved. +// + +@interface PDFView : UIView + +@property (nonatomic, copy) NSString *resourceName; +@property (nonatomic, readonly) CGRect mediaRect; +@property (nonatomic, readonly) UIImage *image; + +@end diff --git a/PDFView.m b/PDFView.m new file mode 100644 index 0000000..2111a74 --- /dev/null +++ b/PDFView.m @@ -0,0 +1,93 @@ +// +// PDFView.m +// +// Created by Nigel Barber on 15/10/2011. +// Copyright 2011 Mindbrix Limited. All rights reserved. +// + +#import "PDFView.h" +#import + +@implementation PDFView { + CGPDFDocumentRef document; +} + +@synthesize resourceName; + +- (id)init { + if ((self = [super init])) { + self.backgroundColor = [UIColor clearColor]; + self.contentMode = UIViewContentModeScaleAspectFit; + [self addObserver:self forKeyPath:@"resourceName" options:NSKeyValueObservingOptionNew context:NULL]; + } + return self; +} + +- (void)dealloc { + [self removeObserver:self forKeyPath:@"resourceName"]; +} + +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { + if ([keyPath isEqualToString:@"resourceName"]) { + if (document) { + CGPDFDocumentRelease(document); + document = NULL; + } + NSString *name = self.resourceName; + if ([name hasSuffix:@"pdf"]) + name = [name substringToIndex:[name rangeOfString:@".pdf"].location]; + NSURL *URL = [[NSBundle mainBundle] URLForResource:name withExtension:@"pdf"]; + document = CGPDFDocumentCreateWithURL((__bridge CFURLRef)URL); + return; + } + [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; +} + +- (CGRect)mediaRect { + CGRect rect = CGRectZero; + + if (document) { + CGPDFPageRef page1 = CGPDFDocumentGetPage( document, 1 ); + rect = CGPDFPageGetBoxRect( page1, kCGPDFCropBox ); + } + + return rect; +} + +- (void)drawRect:(CGRect)rect { + if (!document) + return; + + // Reference: http://www.cocoanetics.com/2010/06/rendering-pdf-is-easier-than-you-thought/ + CGContextRef ctx = UIGraphicsGetCurrentContext(); + + CGContextSetFillColorWithColor( ctx, self.backgroundColor.CGColor ); + CGContextFillRect( ctx, rect ); + + CGContextGetCTM( ctx ); + CGContextScaleCTM( ctx, 1, -1 ); + CGContextTranslateCTM( ctx, 0, -self.bounds.size.height ); + + CGPDFPageRef page1 = CGPDFDocumentGetPage( document, 1 ); + + CGRect mediaRect = CGPDFPageGetBoxRect( page1, kCGPDFCropBox ); + CGContextScaleCTM( ctx, rect.size.width / mediaRect.size.width, rect.size.height / mediaRect.size.height ); + CGContextTranslateCTM( ctx, -mediaRect.origin.x, -mediaRect.origin.y ); + + CGContextDrawPDFPage( ctx, page1 ); +} + +- (UIImage *)image { + if([self.layer respondsToSelector:@selector(setShouldRasterize:)]) + UIGraphicsBeginImageContextWithOptions( self.bounds.size, NO, [UIScreen mainScreen].scale ); + else + UIGraphicsBeginImageContext( self.bounds.size ); + + [self.layer renderInContext:UIGraphicsGetCurrentContext()]; + UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + + return image; +} + +@end \ No newline at end of file diff --git a/UIImage+PDF.h b/UIImage+PDF.h new file mode 100644 index 0000000..b8260ef --- /dev/null +++ b/UIImage+PDF.h @@ -0,0 +1,15 @@ +// +// UIImage+PDF.h +// +// Created by Nigel Barber on 15/10/2011. +// Copyright 2011 Mindbrix Limited. All rights reserved. +// + +@interface UIImage (PDF) + ++ (UIImage *)imageWithPDFNamed:(NSString *)resourceName; ++ (UIImage *)imageWithPDFNamed:(NSString *)resourceName size:(CGSize)size; ++ (UIImage *)imageWithPDFNamed:(NSString *)resourceName width:(CGFloat)width; ++ (UIImage *)imageWithPDFNamed:(NSString *)resourceName height:(CGFloat)height; + +@end diff --git a/UIImage+PDF.m b/UIImage+PDF.m new file mode 100644 index 0000000..a97d639 --- /dev/null +++ b/UIImage+PDF.m @@ -0,0 +1,49 @@ +// +// UIImage+PDF.m +// +// Created by Nigel Barber on 15/10/2011. +// Copyright 2011 Mindbrix Limited. All rights reserved. +// + +#import "UIImage+PDF.h" +#import "PDFView.h" + +@implementation UIImage (PDF) + ++ (UIImage *)imageWithPDFNamed:(NSString *)resourceName { + PDFView *pdfView = [PDFView new]; + pdfView.resourceName = resourceName; + pdfView.frame = (CGRect){ CGPointZero, pdfView.mediaRect.size }; + return pdfView.image; +} + ++(UIImage *)imageWithPDFNamed:(NSString *)resourceName size:(CGSize)size { + PDFView *pdfView = [PDFView new]; + pdfView.resourceName = resourceName; + pdfView.frame = (CGRect){ CGPointZero, size }; + return pdfView.image; +} + ++ (UIImage *)imageWithPDFNamed:(NSString *)resourceName width:(CGFloat)width { + PDFView *pdfView = [PDFView new]; + pdfView.resourceName = resourceName; + + CGRect mediaRect = pdfView.mediaRect; + CGFloat aspectRatio = mediaRect.size.width / mediaRect.size.height; + pdfView.frame = CGRectMake(0, 0, width, ceilf( width / aspectRatio )); + + return pdfView.image; +} + ++ (UIImage *)imageWithPDFNamed:(NSString *)resourceName height:(CGFloat)height { + PDFView *pdfView = [PDFView new]; + pdfView.resourceName = resourceName; + + CGRect mediaRect = pdfView.mediaRect; + CGFloat aspectRatio = mediaRect.size.width / mediaRect.size.height; + pdfView.frame = CGRectMake(0, 0, ceilf( height * aspectRatio ), height); + + return pdfView.image; +} + +@end diff --git a/UIImage+PDF/PDFView.h b/UIImage+PDF/PDFView.h deleted file mode 100644 index 481ce71..0000000 --- a/UIImage+PDF/PDFView.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// PDFView.h -// -// Created by Nigel Barber on 15/10/2011. -// Copyright 2011 Mindbrix Limited. All rights reserved. -// - -#import - - -@interface PDFView : UIView -{ - -} - -@property( nonatomic, assign ) NSString *resourceName; - -+(CGRect) mediaRect:(NSString *)resourceName; -+(NSURL *)resourceURL:(NSString *)resourceName; - -@end diff --git a/UIImage+PDF/PDFView.m b/UIImage+PDF/PDFView.m deleted file mode 100644 index 481eccc..0000000 --- a/UIImage+PDF/PDFView.m +++ /dev/null @@ -1,101 +0,0 @@ -// -// PDFView.m -// -// Created by Nigel Barber on 15/10/2011. -// Copyright 2011 Mindbrix Limited. All rights reserved. -// - -#import "PDFView.h" - - -@implementation PDFView - -@synthesize resourceName = m_resourceName; - - -- (id)initWithFrame:(CGRect)frame -{ - self = [super initWithFrame:frame]; - - if (self) - { - // Initialization code. - } - return self; -} - - --(void)setResourceName:(NSString *)resourceName -{ - m_resourceName = resourceName; - - [ self setNeedsDisplay ]; -} - - -+(CGRect) mediaRect:(NSString *)resourceName -{ - CGRect rect = CGRectNull; - - if( resourceName ) - { - CGPDFDocumentRef pdf = CGPDFDocumentCreateWithURL( (CFURLRef) [ PDFView resourceURL: resourceName ]); - CGPDFPageRef page1 = CGPDFDocumentGetPage( pdf, 1 ); - - rect = CGPDFPageGetBoxRect( page1, kCGPDFCropBox ); - - CGPDFDocumentRelease( pdf ); - } - - return rect; -} - - - -+(NSURL *)resourceURL:(NSString *)resourceName -{ - return ( resourceName ) ? [ NSURL fileURLWithPath:[[ NSBundle mainBundle ] pathForResource:resourceName ofType:nil ]] : nil; -} - - - -/**/ -// Only override drawRect: if you perform custom drawing. -// An empty implementation adversely affects performance during animation. -- (void)drawRect:(CGRect)rect -{ - // Drawing code. - if( self.resourceName ) - { - /* - * Reference: http://www.cocoanetics.com/2010/06/rendering-pdf-is-easier-than-you-thought/ - */ - CGContextRef ctx = UIGraphicsGetCurrentContext(); - - [ self.backgroundColor set ]; - CGContextFillRect( ctx, rect ); - - CGContextGetCTM( ctx ); - CGContextScaleCTM( ctx, 1, -1 ); - CGContextTranslateCTM( ctx, 0, -self.bounds.size.height ); - - CGPDFDocumentRef pdf = CGPDFDocumentCreateWithURL( (CFURLRef) [ PDFView resourceURL: self.resourceName ]); - CGPDFPageRef page1 = CGPDFDocumentGetPage( pdf, 1 ); - - CGRect mediaRect = CGPDFPageGetBoxRect( page1, kCGPDFCropBox ); - CGContextScaleCTM( ctx, rect.size.width / mediaRect.size.width, rect.size.height / mediaRect.size.height ); - CGContextTranslateCTM( ctx, -mediaRect.origin.x, -mediaRect.origin.y ); - - CGContextDrawPDFPage( ctx, page1 ); - CGPDFDocumentRelease( pdf ); - } -} - - -- (void)dealloc -{ - [super dealloc]; -} - - -@end diff --git a/UIImage+PDF/UIImage+PDF.h b/UIImage+PDF/UIImage+PDF.h deleted file mode 100644 index d005919..0000000 --- a/UIImage+PDF/UIImage+PDF.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// UIImage+PDF.h -// -// Created by Nigel Barber on 15/10/2011. -// Copyright 2011 Mindbrix Limited. All rights reserved. -// - -#import -#import "UIView+Image.h" -#import "PDFView.h" - - -@interface UIImage( PDF ) - -+(UIImage *) imageWithPDFNamed:(NSString *)resourceName atSize:(CGSize)size; -+(UIImage *) imageWithPDFNamed:(NSString *)resourceName atWidth:(CGFloat)width; -+(UIImage *) imageWithPDFNamed:(NSString *)resourceName atHeight:(CGFloat)height; -+(UIImage *) originalSizeImageWithPDFNamed:(NSString *)resourceName; - -@end diff --git a/UIImage+PDF/UIImage+PDF.m b/UIImage+PDF/UIImage+PDF.m deleted file mode 100644 index c181dbf..0000000 --- a/UIImage+PDF/UIImage+PDF.m +++ /dev/null @@ -1,54 +0,0 @@ -// -// UIImage+PDF.m -// -// Created by Nigel Barber on 15/10/2011. -// Copyright 2011 Mindbrix Limited. All rights reserved. -// - -#import "UIImage+PDF.h" - - -@implementation UIImage( PDF ) - - -+(UIImage *) imageWithPDFNamed:(NSString *)resourceName atSize:(CGSize)size -{ - PDFView *pdfView = [[[ PDFView alloc ] initWithFrame:CGRectMake( 0, 0, size.width, size.height ) ] autorelease ]; - pdfView.backgroundColor = [ UIColor clearColor ]; - pdfView.resourceName = resourceName; - - return [ pdfView image ]; -} - - -+(UIImage *) imageWithPDFNamed:(NSString *)resourceName atWidth:(CGFloat)width -{ - CGRect mediaRect = [ PDFView mediaRect:resourceName ]; - CGFloat aspectRatio = mediaRect.size.width / mediaRect.size.height; - - CGSize size = CGSizeMake( width, ceilf( width / aspectRatio )); - - return [ UIImage imageWithPDFNamed:resourceName atSize:size ]; -} - - -+(UIImage *) imageWithPDFNamed:(NSString *)resourceName atHeight:(CGFloat)height -{ - CGRect mediaRect = [ PDFView mediaRect:resourceName ]; - CGFloat aspectRatio = mediaRect.size.width / mediaRect.size.height; - - CGSize size = CGSizeMake( ceilf( height * aspectRatio ), height ); - - return [ UIImage imageWithPDFNamed:resourceName atSize:size ]; -} - - -+(UIImage *) originalSizeImageWithPDFNamed:(NSString *)resourceName -{ - CGRect mediaRect = [ PDFView mediaRect:resourceName ]; - - return [ UIImage imageWithPDFNamed:resourceName atSize:mediaRect.size ]; -} - - -@end diff --git a/UIImage+PDF/UIView+Image.h b/UIImage+PDF/UIView+Image.h deleted file mode 100644 index a570397..0000000 --- a/UIImage+PDF/UIView+Image.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// UIView+Image.h -// -// Created by Nigel Barber on 21/07/2011. -// Copyright 2011 Mindbrix Limited. All rights reserved. -// - -#import -#import - -@interface UIView( Image ) - --(UIImage *) image; --(void) savePNG:(NSString *)filePath; --(void) saveJPEG:(NSString *)filePath :(float)quality; - -@end \ No newline at end of file diff --git a/UIImage+PDF/UIView+Image.m b/UIImage+PDF/UIView+Image.m deleted file mode 100644 index f460ee9..0000000 --- a/UIImage+PDF/UIView+Image.m +++ /dev/null @@ -1,44 +0,0 @@ -// -// UIView+Image.m -// -// Created by Nigel Barber on 21/07/2011. -// Copyright 2011 Mindbrix Limited. All rights reserved. -// - -#import "UIView+Image.h" - - -@implementation UIView( Image ) - --(UIImage *)image -{ - if( [ self.layer respondsToSelector:@selector(setShouldRasterize:)]) - { - UIGraphicsBeginImageContextWithOptions( self.bounds.size, NO, [UIScreen mainScreen].scale ); - } - else - { - UIGraphicsBeginImageContext( self.bounds.size ); - } - - [ self.layer renderInContext:UIGraphicsGetCurrentContext() ]; - UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - - return image; -} - - - --(void) savePNG:(NSString *)filePath -{ - [ UIImagePNGRepresentation(self.image) writeToFile:filePath atomically:NO ]; -} - - --(void) saveJPEG:(NSString *)filePath :(float)quality -{ - [ UIImageJPEGRepresentation(self.image, quality) writeToFile:filePath atomically:NO ]; -} - -@end