Fixed several bugs. Added ability to select which page index is displayed first. Target now supports iPhone and iPad.

This commit is contained in:
Michael Waterfall
2010-10-26 17:22:10 +01:00
parent c822fa0426
commit 4a55e2bf47
10 changed files with 708 additions and 209 deletions

View File

@@ -27,7 +27,11 @@
// Navigation & controls
UIToolbar *toolbar;
NSTimer *controlVisibilityTimer;
UIBarButtonItem *previousButton, *nextButton;
BOOL performingLayout;
BOOL rotating;
}
// Init
@@ -51,6 +55,7 @@
- (CGRect)frameForPagingScrollView;
- (CGRect)frameForPageAtIndex:(NSUInteger)index;
- (CGSize)contentSizeForPagingScrollView;
- (CGPoint)contentOffsetForPageAtIndex:(int)index;
- (CGRect)frameForNavigationBarAtOrientation:(UIInterfaceOrientation)orientation;
- (CGRect)frameForToolbarAtOrientation:(UIInterfaceOrientation)orientation;
@@ -66,5 +71,8 @@
- (void)setControlsHidden:(BOOL)hidden;
- (void)toggleControls;
// Properties
- (void)setInitialPageIndex:(int)index;
@end

View File

@@ -28,6 +28,8 @@
// Defaults
self.wantsFullScreenLayout = YES;
currentPageIndex = 0;
performingLayout = NO;
rotating = NO;
}
return self;
@@ -57,6 +59,8 @@
[visiblePages release];
[recycledPages release];
[toolbar release];
[previousButton release];
[nextButton release];
}
- (void)dealloc {
@@ -65,6 +69,8 @@
[visiblePages release];
[recycledPages release];
[toolbar release];
[previousButton release];
[nextButton release];
[super dealloc];
}
@@ -87,6 +93,7 @@
pagingScrollView.showsVerticalScrollIndicator = NO;
pagingScrollView.backgroundColor = [UIColor blackColor];
pagingScrollView.contentSize = [self contentSizeForPagingScrollView];
pagingScrollView.contentOffset = [self contentOffsetForPageAtIndex:currentPageIndex];
[self.view addSubview:pagingScrollView];
// Setup pages
@@ -105,18 +112,18 @@
[self.view addSubview:toolbar];
// Toolbar Items
UIBarButtonItem *previousImage = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"UIBarButtonItemArrowLeft.png"] style:UIBarButtonItemStylePlain target:self action:@selector(gotoPreviousPage)];
UIBarButtonItem *nextImage = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"UIBarButtonItemArrowRight.png"] style:UIBarButtonItemStylePlain target:self action:@selector(gotoNextPage)];
previousButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"UIBarButtonItemArrowLeft.png"] style:UIBarButtonItemStylePlain target:self action:@selector(gotoPreviousPage)];
nextButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"UIBarButtonItemArrowRight.png"] style:UIBarButtonItemStylePlain target:self action:@selector(gotoNextPage)];
UIBarButtonItem *space = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
NSMutableArray *items = [[NSMutableArray alloc] init];
[items addObject:space];
if (photos.count > 1) [items addObject:previousImage];
if (photos.count > 1) [items addObject:previousButton];
[items addObject:space];
if (photos.count > 1) [items addObject:nextImage];
if (photos.count > 1) [items addObject:nextButton];
[items addObject:space];
[toolbar setItems:items];
[items release];
[previousImage release], [nextImage release], [space release];
[space release];
// Super
[super viewDidLoad];
@@ -157,6 +164,9 @@
// Layout subviews
- (void)performLayout {
// Flag
performingLayout = YES;
// Toolbar
toolbar.frame = [self frameForToolbarAtOrientation:self.interfaceOrientation];
@@ -176,16 +186,14 @@
for (ZoomingScrollView *page in visiblePages) {
page.frame = [self frameForPageAtIndex:page.index];
[page setMaxMinZoomScalesForCurrentBounds];
page.zoomScale = page.minimumZoomScale;
}
// adjust contentOffset to preserve page location based on values collected prior to location
CGFloat pageWidth = pagingScrollView.bounds.size.width;
CGFloat newOffset = indexPriorToLayout * pageWidth;
pagingScrollView.contentOffset = CGPointMake(newOffset, 0);
// Adjust contentOffset to preserve page location based on values collected prior to location
pagingScrollView.contentOffset = [self contentOffsetForPageAtIndex:indexPriorToLayout];
// Reset page
// Reset
currentPageIndex = indexPriorToLayout;
performingLayout = NO;
}
@@ -351,6 +359,12 @@
return CGSizeMake(bounds.size.width * photos.count, bounds.size.height);
}
- (CGPoint)contentOffsetForPageAtIndex:(int)index {
CGFloat pageWidth = pagingScrollView.bounds.size.width;
CGFloat newOffset = index * pageWidth;
return CGPointMake(newOffset, 0);
}
- (CGRect)frameForNavigationBarAtOrientation:(UIInterfaceOrientation)orientation {
CGFloat height = UIInterfaceOrientationIsPortrait(orientation) ? 44 : 32;
return CGRectMake(0, 20, self.view.bounds.size.width, height);
@@ -366,6 +380,8 @@
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
if (performingLayout || rotating) return;
// Tile pages
[self tilePages];
@@ -402,6 +418,10 @@
self.title = nil;
}
// Buttons
previousButton.enabled = (currentPageIndex > 0);
nextButton.enabled = (currentPageIndex < photos.count-1);
}
- (void)jumpToPageAtIndex:(int)index {
@@ -496,6 +516,7 @@
// Remember page index before rotation
pageIndexBeforeRotation = currentPageIndex;
rotating = YES;
}
@@ -510,4 +531,21 @@
}
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
rotating = NO;
}
#pragma mark -
#pragma mark Properties
- (void)setInitialPageIndex:(int)index {
if (![self isViewLoaded]) {
if (index < 0 || index >= photos.count) {
currentPageIndex = 0;
} else {
currentPageIndex = index;
}
}
}
@end

View File

@@ -99,6 +99,7 @@
// Create browser
MWPhotoBrowser *browser = [[MWPhotoBrowser alloc] initWithPhotos:photos];
// [browser setInitialPageIndex:1]; Can be changed if desired
[self.navigationController pushViewController:browser animated:YES];
[browser release];
[photos release];

View File

@@ -77,10 +77,12 @@
// Get and display image
- (void)displayImage {
if (index != NSNotFound) {
if (index != NSNotFound && photoImageView.image == nil) {
// Reset
self.zoomScale = 1; // Reset zoom scale to 1
self.maximumZoomScale = 1;
self.minimumZoomScale = 1;
self.zoomScale = 1;
self.contentSize = CGSizeMake(0, 0);
// Get image
@@ -103,7 +105,6 @@
// Set zoom to minimum zoom
[self setMaxMinZoomScalesForCurrentBounds];
self.zoomScale = self.minimumZoomScale;
} else {
@@ -114,6 +115,7 @@
}
}
[self setNeedsLayout];
}
// Image failed so just show black!
@@ -126,9 +128,17 @@
- (void)setMaxMinZoomScalesForCurrentBounds {
// Reset
self.maximumZoomScale = 1;
self.minimumZoomScale = 1;
self.zoomScale = 1;
// Bail
if (photoImageView.image == nil) return;
// Sizes
CGSize boundsSize = self.bounds.size;
CGSize imageSize = photoImageView.bounds.size;
CGSize imageSize = photoImageView.frame.size;
// Calculate Min
CGFloat xScale = boundsSize.width / imageSize.width; // the scale needed to perfectly fit the image width-wise
@@ -136,17 +146,21 @@
CGFloat minScale = MIN(xScale, yScale); // use minimum of these to allow the image to become fully visible
// Calculate Max
CGFloat maxScale = 1.0;
CGFloat maxScale = 2.0; // Allow double scale
// on high resolution screens we have double the pixel density, so we will be seeing every pixel if we limit the
// maximum zoom scale to 0.5.
//if ([UIScreen instancesRespondToSelector:@selector(scale)]) maxScale = 1.0 / [[UIScreen mainScreen] scale];
// Don't let minScale exceed maxScale. (If the image is smaller than the screen, we don't want to force it to be zoomed.)
if (minScale > maxScale) minScale = maxScale;
// Set
self.maximumZoomScale = maxScale;
self.minimumZoomScale = minScale;
//if ([UIScreen instancesRespondToSelector:@selector(scale)]) maxScale = maxScale / [[UIScreen mainScreen] scale];
// If image is smaller than the screen then ensure we show it at
// min scale of 1
if (xScale > 1 && yScale > 1) {
minScale = 1.0;
}
// Set
self.maximumZoomScale = maxScale;
self.minimumZoomScale = minScale;
self.zoomScale = minScale;
// Reset position
photoImageView.frame = CGRectMake(0, 0, photoImageView.frame.size.width, photoImageView.frame.size.height);

View File

@@ -26,6 +26,8 @@
<true/>
<key>NSMainNibFile</key>
<string>MainWindow</string>
<key>NSMainNibFile~ipad</key>
<string>MainWindow-iPad</string>
<key>UIApplicationExitsOnSuspend</key>
<true/>
</dict>

View File

@@ -274,7 +274,6 @@
<string>4CC82BC51266798B00C05633</string>
<string>4C48EFD4126F90CA00F85546</string>
<string>4C48EFD3126F90C600F85546</string>
<string>29B97317FDCFA39411CA2CEA</string>
<string>1C37FBAC04509CD000000102</string>
<string>1C37FAAC04509CD000000102</string>
</array>
@@ -307,7 +306,7 @@
<real>363</real>
</array>
<key>RubberWindowFrame</key>
<string>230 184 1440 861 0 0 1920 1178 </string>
<string>240 174 1440 861 0 0 1920 1178 </string>
</dict>
<key>Module</key>
<string>PBXSmartGroupTreeModule</string>
@@ -337,29 +336,30 @@
<key>_historyCapacity</key>
<integer>0</integer>
<key>bookmark</key>
<string>4C667CBC1270D4560008B630</string>
<string>4C4157121277373000C96767</string>
<key>history</key>
<array>
<string>4C75D4A3126B7ABF004D0ECF</string>
<string>4C48EFE8126F932C00F85546</string>
<string>4C3EAFC9126FC70A00C7CF25</string>
<string>4C3EAFCA126FC70A00C7CF25</string>
<string>4C3EAFCB126FC70A00C7CF25</string>
<string>4C3EAFCC126FC70A00C7CF25</string>
<string>4C3EAFCD126FC70A00C7CF25</string>
<string>4C3EAFD0126FC70A00C7CF25</string>
<string>4C667C591270C8370008B630</string>
<string>4C667C5A1270C8370008B630</string>
<string>4C667C5D1270C8EC0008B630</string>
<string>4C667C5E1270C8EC0008B630</string>
<string>4C667C601270C8EC0008B630</string>
<string>4C667C6E1270CA3A0008B630</string>
<string>4C667C6F1270CA3A0008B630</string>
<string>4C667CAC1270CF150008B630</string>
<string>4C667CB41270D1230008B630</string>
<string>4C667CB51270D1230008B630</string>
<string>4C667CB61270D1230008B630</string>
<string>4C667CAB1270CF150008B630</string>
<string>4C41556212770FD300C96767</string>
<string>4C41559C1277143800C96767</string>
<string>4C415675127728CC00C96767</string>
<string>4C4156B812772E4100C96767</string>
<string>4C4156BA12772E4100C96767</string>
<string>4C4156CD127731D900C96767</string>
<string>4C4156E01277331E00C96767</string>
<string>4C4157051277364000C96767</string>
<string>4C41570E1277373000C96767</string>
<string>4C41570F1277373000C96767</string>
<string>4C4157101277373000C96767</string>
</array>
</dict>
<key>SplitCount</key>
@@ -373,7 +373,7 @@
<key>Frame</key>
<string>{{0, 0}, {1055, 815}}</string>
<key>RubberWindowFrame</key>
<string>230 184 1440 861 0 0 1920 1178 </string>
<string>240 174 1440 861 0 0 1920 1178 </string>
</dict>
<key>Module</key>
<string>PBXNavigatorGroup</string>
@@ -393,7 +393,7 @@
<key>Frame</key>
<string>{{0, 820}, {1055, 0}}</string>
<key>RubberWindowFrame</key>
<string>230 184 1440 861 0 0 1920 1178 </string>
<string>240 174 1440 861 0 0 1920 1178 </string>
</dict>
<key>Module</key>
<string>XCDetailModule</string>
@@ -417,9 +417,9 @@
</array>
<key>TableOfContents</key>
<array>
<string>4C667BF61270C1200008B630</string>
<string>4C41552F12770E7600C96767</string>
<string>1CE0B1FE06471DED0097A5F4</string>
<string>4C667BF71270C1200008B630</string>
<string>4C41553012770E7600C96767</string>
<string>1CE0B20306471E060097A5F4</string>
<string>1CE0B20506471E060097A5F4</string>
</array>
@@ -558,15 +558,15 @@
<key>WindowOrderList</key>
<array>
<string>1C530D57069F1CE1000CFCEE</string>
<string>4C667C011270C1200008B630</string>
<string>4C667C021270C1200008B630</string>
<string>4C41553A12770E7600C96767</string>
<string>4C41553B12770E7600C96767</string>
<string>1CD10A99069EF8BA00B06720</string>
<string>4CC82BC01266793900C05633</string>
<string>/Users/Michael/My Work/d3i/Projects/MWPhotoBrowser/MWPhotoBrowser.xcodeproj</string>
<string>1C78EAAD065D492600B07095</string>
<string>/Users/Michael/My Work/d3i/Projects/MWPhotoBrowser/MWPhotoBrowser.xcodeproj</string>
</array>
<key>WindowString</key>
<string>230 184 1440 861 0 0 1920 1178 </string>
<string>240 174 1440 861 0 0 1920 1178 </string>
<key>WindowToolsV3</key>
<array>
<dict>
@@ -587,7 +587,7 @@
<key>PBXProjectModuleGUID</key>
<string>1CD0528F0623707200166675</string>
<key>PBXProjectModuleLabel</key>
<string></string>
<string>MWPhotoBrowser.m</string>
<key>StatusBarVisibility</key>
<true/>
</dict>
@@ -604,6 +604,8 @@
<string>432pt</string>
</dict>
<dict>
<key>BecomeActive</key>
<true/>
<key>ContentConfiguration</key>
<dict>
<key>PBXProjectModuleGUID</key>
@@ -643,7 +645,7 @@
<key>TableOfContents</key>
<array>
<string>4CC82BC01266793900C05633</string>
<string>4C667BF81270C1200008B630</string>
<string>4C41553112770E7600C96767</string>
<string>1CD0528F0623707200166675</string>
<string>XCMainBuildResultsModuleGUID</string>
</array>
@@ -739,10 +741,10 @@
<key>Frame</key>
<string>{{587, 0}, {700, 389}}</string>
<key>RubberWindowFrame</key>
<string>633 402 1287 776 0 0 1920 1178 </string>
<string>348 284 1287 776 0 0 1920 1178 </string>
</dict>
<key>RubberWindowFrame</key>
<string>633 402 1287 776 0 0 1920 1178 </string>
<string>348 284 1287 776 0 0 1920 1178 </string>
</dict>
<key>Module</key>
<string>PBXDebugSessionModule</string>
@@ -765,18 +767,18 @@
<key>TableOfContents</key>
<array>
<string>1CD10A99069EF8BA00B06720</string>
<string>4C667BF91270C1200008B630</string>
<string>4C41553212770E7600C96767</string>
<string>1C162984064C10D400B95A72</string>
<string>4C667BFA1270C1200008B630</string>
<string>4C667BFB1270C1200008B630</string>
<string>4C667BFC1270C1200008B630</string>
<string>4C667BFD1270C1200008B630</string>
<string>4C667BFE1270C1200008B630</string>
<string>4C41553312770E7600C96767</string>
<string>4C41553412770E7600C96767</string>
<string>4C41553512770E7600C96767</string>
<string>4C41553612770E7600C96767</string>
<string>4C41553712770E7600C96767</string>
</array>
<key>ToolbarConfiguration</key>
<string>xcode.toolbar.config.debugV3</string>
<key>WindowString</key>
<string>633 402 1287 776 0 0 1920 1178 </string>
<string>348 284 1287 776 0 0 1920 1178 </string>
<key>WindowToolGUID</key>
<string>1CD10A99069EF8BA00B06720</string>
<key>WindowToolIsVisible</key>
@@ -805,25 +807,25 @@
<key>PBXProjectModuleGUID</key>
<string>1CDD528C0622207200134675</string>
<key>PBXProjectModuleLabel</key>
<string>MWPhotoBrowser.m</string>
<string>ZoomingScrollView.m</string>
<key>StatusBarVisibility</key>
<true/>
</dict>
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{0, 0}, {1920, 805}}</string>
<string>{{0, 0}, {1247, 593}}</string>
<key>RubberWindowFrame</key>
<string>0 4 1920 1174 0 0 1920 1178 </string>
<string>50 216 1247 962 0 0 1920 1178 </string>
</dict>
<key>Module</key>
<string>PBXNavigatorGroup</string>
<key>Proportion</key>
<string>1920pt</string>
<string>1247pt</string>
</dict>
</array>
<key>Proportion</key>
<string>805pt</string>
<string>593pt</string>
</dict>
<dict>
<key>ContentConfiguration</key>
@@ -836,9 +838,9 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{0, 810}, {1920, 323}}</string>
<string>{{0, 598}, {1247, 323}}</string>
<key>RubberWindowFrame</key>
<string>0 4 1920 1174 0 0 1920 1178 </string>
<string>50 216 1247 962 0 0 1920 1178 </string>
</dict>
<key>Module</key>
<string>PBXProjectFindModule</string>
@@ -847,7 +849,7 @@
</dict>
</array>
<key>Proportion</key>
<string>1133pt</string>
<string>921pt</string>
</dict>
</array>
<key>Name</key>
@@ -861,13 +863,13 @@
<key>TableOfContents</key>
<array>
<string>1C530D57069F1CE1000CFCEE</string>
<string>4C667C391270C5340008B630</string>
<string>4C667C3A1270C5340008B630</string>
<string>4C41555B12770FA000C96767</string>
<string>4C41555C12770FA000C96767</string>
<string>1CDD528C0622207200134675</string>
<string>1CD0528E0623707200166675</string>
</array>
<key>WindowString</key>
<string>0 4 1920 1174 0 0 1920 1178 </string>
<string>50 216 1247 962 0 0 1920 1178 </string>
<key>WindowToolGUID</key>
<string>1C530D57069F1CE1000CFCEE</string>
<key>WindowToolIsVisible</key>
@@ -927,7 +929,7 @@
<key>TableOfContents</key>
<array>
<string>1C78EAAD065D492600B07095</string>
<string>4C667BFF1270C1200008B630</string>
<string>4C41553812770E7600C96767</string>
<string>1C78EAAC065D492600B07095</string>
</array>
<key>ToolbarConfiguration</key>

View File

@@ -10,7 +10,7 @@
1D3623250D0F684500981E51 /* MWPhotoBrowserAppDelegate.m */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1965, 1092}}";
sepNavSelRange = "{469, 0}";
sepNavSelRange = "{715, 0}";
sepNavVisRange = "{0, 2237}";
};
};
@@ -22,16 +22,16 @@
};
28D7ACF60DDB3853001CB0EB /* MWPhotoBrowser.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1474, 1032}}";
sepNavSelRange = "{572, 0}";
sepNavVisRange = "{0, 1571}";
sepNavIntBoundsRect = "{{0, 0}, {1474, 1057}}";
sepNavSelRange = "{661, 0}";
sepNavVisRange = "{0, 1766}";
};
};
28D7ACF70DDB3853001CB0EB /* MWPhotoBrowser.m */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1859, 6344}}";
sepNavSelRange = "{7542, 0}";
sepNavVisRange = "{9800, 2274}";
sepNavIntBoundsRect = "{{0, 0}, {1265, 6760}}";
sepNavSelRange = "{5312, 0}";
sepNavVisRange = "{9362, 806}";
sepNavWindowFrame = "{{15, 299}, {938, 874}}";
};
};
@@ -132,56 +132,37 @@
PBXFileDataSource_Warnings_ColumnID,
);
};
PBXPerProjectTemplateStateSaveDate = 309379108;
PBXWorkspaceStateSaveDate = 309379108;
PBXPerProjectTemplateStateSaveDate = 309792199;
PBXWorkspaceStateSaveDate = 309792199;
};
perUserProjectItems = {
4C3EAFC9126FC70A00C7CF25 /* PBXTextBookmark */ = 4C3EAFC9126FC70A00C7CF25 /* PBXTextBookmark */;
4C3EAFCA126FC70A00C7CF25 /* PBXTextBookmark */ = 4C3EAFCA126FC70A00C7CF25 /* PBXTextBookmark */;
4C3EAFCB126FC70A00C7CF25 /* PBXTextBookmark */ = 4C3EAFCB126FC70A00C7CF25 /* PBXTextBookmark */;
4C3EAFCC126FC70A00C7CF25 /* PBXTextBookmark */ = 4C3EAFCC126FC70A00C7CF25 /* PBXTextBookmark */;
4C3EAFCD126FC70A00C7CF25 /* PBXTextBookmark */ = 4C3EAFCD126FC70A00C7CF25 /* PBXTextBookmark */;
4C3EAFD0126FC70A00C7CF25 /* PBXTextBookmark */ = 4C3EAFD0126FC70A00C7CF25 /* PBXTextBookmark */;
4C41556212770FD300C96767 /* PBXTextBookmark */ = 4C41556212770FD300C96767 /* PBXTextBookmark */;
4C41559C1277143800C96767 /* PBXTextBookmark */ = 4C41559C1277143800C96767 /* PBXTextBookmark */;
4C415675127728CC00C96767 /* PBXTextBookmark */ = 4C415675127728CC00C96767 /* PBXTextBookmark */;
4C4156B812772E4100C96767 /* PBXTextBookmark */ = 4C4156B812772E4100C96767 /* PBXTextBookmark */;
4C4156BA12772E4100C96767 /* PBXTextBookmark */ = 4C4156BA12772E4100C96767 /* PBXTextBookmark */;
4C4156CD127731D900C96767 /* PBXTextBookmark */ = 4C4156CD127731D900C96767 /* PBXTextBookmark */;
4C4156E01277331E00C96767 /* PBXTextBookmark */ = 4C4156E01277331E00C96767 /* PBXTextBookmark */;
4C4157051277364000C96767 /* PBXTextBookmark */ = 4C4157051277364000C96767 /* PBXTextBookmark */;
4C41570E1277373000C96767 /* PBXTextBookmark */ = 4C41570E1277373000C96767 /* PBXTextBookmark */;
4C41570F1277373000C96767 /* PBXTextBookmark */ = 4C41570F1277373000C96767 /* PBXTextBookmark */;
4C4157101277373000C96767 /* PBXTextBookmark */ = 4C4157101277373000C96767 /* PBXTextBookmark */;
4C4157121277373000C96767 /* PBXTextBookmark */ = 4C4157121277373000C96767 /* PBXTextBookmark */;
4C48EFE8126F932C00F85546 /* PBXTextBookmark */ = 4C48EFE8126F932C00F85546 /* PBXTextBookmark */;
4C667C591270C8370008B630 /* PBXTextBookmark */ = 4C667C591270C8370008B630 /* PBXTextBookmark */;
4C667C5A1270C8370008B630 /* PBXTextBookmark */ = 4C667C5A1270C8370008B630 /* PBXTextBookmark */;
4C667C5D1270C8EC0008B630 /* PBXTextBookmark */ = 4C667C5D1270C8EC0008B630 /* PBXTextBookmark */;
4C667C5E1270C8EC0008B630 /* PBXTextBookmark */ = 4C667C5E1270C8EC0008B630 /* PBXTextBookmark */;
4C667C601270C8EC0008B630 /* PBXTextBookmark */ = 4C667C601270C8EC0008B630 /* PBXTextBookmark */;
4C667C6E1270CA3A0008B630 /* PBXBookmark */ = 4C667C6E1270CA3A0008B630 /* PBXBookmark */;
4C667C6F1270CA3A0008B630 /* PBXBookmark */ = 4C667C6F1270CA3A0008B630 /* PBXBookmark */;
4C667CAB1270CF150008B630 /* PBXTextBookmark */ = 4C667CAB1270CF150008B630 /* PBXTextBookmark */;
4C667CAC1270CF150008B630 /* PBXTextBookmark */ = 4C667CAC1270CF150008B630 /* PBXTextBookmark */;
4C667CB41270D1230008B630 /* PBXTextBookmark */ = 4C667CB41270D1230008B630 /* PBXTextBookmark */;
4C667CB51270D1230008B630 /* PBXBookmark */ = 4C667CB51270D1230008B630 /* PBXBookmark */;
4C667CB61270D1230008B630 /* PBXTextBookmark */ = 4C667CB61270D1230008B630 /* PBXTextBookmark */;
4C667CBC1270D4560008B630 /* PBXTextBookmark */ = 4C667CBC1270D4560008B630 /* PBXTextBookmark */;
4C75D4A3126B7ABF004D0ECF /* PlistBookmark */ = 4C75D4A3126B7ABF004D0ECF /* PlistBookmark */;
};
sourceControlManager = 4CC82BC21266793900C05633 /* Source Control */;
userBuildSettings = {
};
};
4C3EAFC9126FC70A00C7CF25 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 4C48EFCB126F8DD900F85546 /* UIImage+Decompress.h */;
name = "UIImage+Decompress.h: 12";
rLen = 0;
rLoc = 233;
rType = 0;
vrLen = 239;
vrLoc = 0;
};
4C3EAFCA126FC70A00C7CF25 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 4C48EFCC126F8DD900F85546 /* UIImage+Decompress.m */;
name = "UIImage+Decompress.m: 13";
rLen = 0;
rLoc = 271;
rType = 0;
vrLen = 1042;
vrLoc = 0;
};
4C3EAFCB126FC70A00C7CF25 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 4C48EFD1126F90B100F85546 /* UIViewTap.m */;
@@ -222,6 +203,132 @@
vrLen = 968;
vrLoc = 0;
};
4C41556212770FD300C96767 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 4CC82BE41266804500C05633 /* ZoomingScrollView.h */;
name = "ZoomingScrollView.h: 26";
rLen = 0;
rLoc = 539;
rType = 0;
vrLen = 875;
vrLoc = 0;
};
4C41559C1277143800C96767 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 4C75D46E126B659A004D0ECF /* MWPhoto.m */;
name = "MWPhoto.m: 141";
rLen = 74;
rLoc = 2964;
rType = 0;
vrLen = 1700;
vrLoc = 2141;
};
4C415675127728CC00C96767 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 4C415676127728CC00C96767 /* CGGeometry.h */;
name = "CGGeometry.h: 264";
rLen = 0;
rLoc = 8272;
rType = 0;
vrLen = 2610;
vrLoc = 6334;
};
4C415676127728CC00C96767 /* CGGeometry.h */ = {
isa = PBXFileReference;
name = CGGeometry.h;
path = /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.1.sdk/System/Library/Frameworks/CoreGraphics.framework/Headers/CGGeometry.h;
sourceTree = "<absolute>";
};
4C4156B812772E4100C96767 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 4C48EFCB126F8DD900F85546 /* UIImage+Decompress.h */;
name = "UIImage+Decompress.h: 12";
rLen = 0;
rLoc = 233;
rType = 0;
vrLen = 239;
vrLoc = 0;
};
4C4156BA12772E4100C96767 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 1D3623240D0F684500981E51 /* MWPhotoBrowserAppDelegate.h */;
name = "MWPhotoBrowserAppDelegate.h: 19";
rLen = 0;
rLoc = 342;
rType = 0;
vrLen = 342;
vrLoc = 0;
};
4C4156CD127731D900C96767 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 4C48EFCC126F8DD900F85546 /* UIImage+Decompress.m */;
name = "UIImage+Decompress.m: 13";
rLen = 0;
rLoc = 271;
rType = 0;
vrLen = 1042;
vrLoc = 0;
};
4C4156E01277331E00C96767 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 4CC82BE51266804500C05633 /* ZoomingScrollView.m */;
name = "ZoomingScrollView.m: 22";
rLen = 0;
rLoc = 500;
rType = 0;
vrLen = 2057;
vrLoc = 0;
};
4C4157051277364000C96767 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 28D7ACF60DDB3853001CB0EB /* MWPhotoBrowser.h */;
name = "MWPhotoBrowser.h: 34";
rLen = 0;
rLoc = 661;
rType = 0;
vrLen = 1766;
vrLoc = 0;
};
4C41570E1277373000C96767 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 28D7ACF70DDB3853001CB0EB /* MWPhotoBrowser.m */;
name = "MWPhotoBrowser.m: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 1310;
vrLoc = 0;
};
4C41570F1277373000C96767 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 1D3623250D0F684500981E51 /* MWPhotoBrowserAppDelegate.m */;
name = "MWPhotoBrowserAppDelegate.m: 26";
rLen = 0;
rLoc = 715;
rType = 0;
vrLen = 2237;
vrLoc = 0;
};
4C4157101277373000C96767 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 4C667B2C1270AFCE0008B630 /* Menu.m */;
name = "Menu.m: 102";
rLen = 0;
rLoc = 3455;
rType = 0;
vrLen = 2578;
vrLoc = 1077;
};
4C4157121277373000C96767 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 4C667B2C1270AFCE0008B630 /* Menu.m */;
name = "Menu.m: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 1562;
vrLoc = 0;
};
4C48EFCB126F8DD900F85546 /* UIImage+Decompress.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1474, 1057}}";
@@ -231,7 +338,7 @@
};
4C48EFCC126F8DD900F85546 /* UIImage+Decompress.m */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1474, 1057}}";
sepNavIntBoundsRect = "{{0, 0}, {1474, 1034}}";
sepNavSelRange = "{271, 0}";
sepNavVisRange = "{0, 1042}";
};
@@ -269,31 +376,11 @@
};
4C667B2C1270AFCE0008B630 /* Menu.m */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {994, 1625}}";
sepNavIntBoundsRect = "{{0, 0}, {994, 1651}}";
sepNavSelRange = "{0, 0}";
sepNavVisRange = "{0, 1562}";
};
};
4C667C591270C8370008B630 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 4CC82BE41266804500C05633 /* ZoomingScrollView.h */;
name = "ZoomingScrollView.h: 36";
rLen = 0;
rLoc = 733;
rType = 0;
vrLen = 875;
vrLoc = 0;
};
4C667C5A1270C8370008B630 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 4CC82BE51266804500C05633 /* ZoomingScrollView.m */;
name = "ZoomingScrollView.m: 105";
rLen = 0;
rLoc = 2627;
rType = 0;
vrLen = 1643;
vrLoc = 1603;
};
4C667C5D1270C8EC0008B630 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 4C667B2B1270AFCE0008B630 /* Menu.h */;
@@ -304,26 +391,6 @@
vrLen = 209;
vrLoc = 0;
};
4C667C5E1270C8EC0008B630 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 1D3623240D0F684500981E51 /* MWPhotoBrowserAppDelegate.h */;
name = "MWPhotoBrowserAppDelegate.h: 19";
rLen = 0;
rLoc = 342;
rType = 0;
vrLen = 342;
vrLoc = 0;
};
4C667C601270C8EC0008B630 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 4C75D46E126B659A004D0ECF /* MWPhoto.m */;
name = "MWPhoto.m: 114";
rLen = 0;
rLoc = 2417;
rType = 0;
vrLen = 2295;
vrLoc = 1342;
};
4C667C6E1270CA3A0008B630 /* PBXBookmark */ = {
isa = PBXBookmark;
fRef = 4C667C411270C6A50008B630 /* UIBarButtonItemArrowLeft.png */;
@@ -332,60 +399,10 @@
isa = PBXBookmark;
fRef = 4C667C421270C6A50008B630 /* UIBarButtonItemArrowLeft@2x.png */;
};
4C667CAB1270CF150008B630 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 4C667B2C1270AFCE0008B630 /* Menu.m */;
name = "Menu.m: 34";
rLen = 0;
rLoc = 644;
rType = 0;
vrLen = 2216;
vrLoc = 33;
};
4C667CAC1270CF150008B630 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 28D7ACF60DDB3853001CB0EB /* MWPhotoBrowser.h */;
name = "MWPhotoBrowser.h: 30";
rLen = 0;
rLoc = 572;
rType = 0;
vrLen = 1571;
vrLoc = 0;
};
4C667CB41270D1230008B630 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 28D7ACF70DDB3853001CB0EB /* MWPhotoBrowser.m */;
name = "MWPhotoBrowser.m: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 1823;
vrLoc = 0;
};
4C667CB51270D1230008B630 /* PBXBookmark */ = {
isa = PBXBookmark;
fRef = 4CFB7931126A3B4100E5F263 /* photo1l.jpg */;
};
4C667CB61270D1230008B630 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 1D3623250D0F684500981E51 /* MWPhotoBrowserAppDelegate.m */;
name = "MWPhotoBrowserAppDelegate.m: 21";
rLen = 0;
rLoc = 469;
rType = 0;
vrLen = 2237;
vrLoc = 0;
};
4C667CBC1270D4560008B630 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 4C667B2C1270AFCE0008B630 /* Menu.m */;
name = "Menu.m: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 1562;
vrLoc = 0;
};
4C75D46D126B659A004D0ECF /* MWPhoto.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1474, 1057}}";
@@ -395,9 +412,9 @@
};
4C75D46E126B659A004D0ECF /* MWPhoto.m */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1859, 2366}}";
sepNavSelRange = "{1606, 0}";
sepNavVisRange = "{1343, 1546}";
sepNavIntBoundsRect = "{{0, 0}, {994, 2197}}";
sepNavSelRange = "{2964, 74}";
sepNavVisRange = "{2141, 1700}";
};
};
4C75D4A3126B7ABF004D0ECF /* PlistBookmark */ = {
@@ -418,7 +435,7 @@
argumentStrings = (
);
autoAttachOnCrash = 1;
breakpointsEnabled = 0;
breakpointsEnabled = 1;
configStateDict = {
};
customDataFormattersEnabled = 1;
@@ -459,16 +476,16 @@
};
4CC82BE41266804500C05633 /* ZoomingScrollView.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1474, 1057}}";
sepNavSelRange = "{733, 0}";
sepNavIntBoundsRect = "{{0, 0}, {994, 760}}";
sepNavSelRange = "{539, 0}";
sepNavVisRange = "{0, 875}";
};
};
4CC82BE51266804500C05633 /* ZoomingScrollView.m */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1474, 3341}}";
sepNavSelRange = "{2627, 0}";
sepNavVisRange = "{1603, 1643}";
sepNavIntBoundsRect = "{{0, 0}, {1186, 3549}}";
sepNavSelRange = "{1900, 0}";
sepNavVisRange = "{1729, 859}";
};
};
4CFB783C126A29BE00E5F263 /* UIImageViewTap.h */ = {

View File

@@ -14,6 +14,7 @@
288765A50DF7441C002DB57D /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 288765A40DF7441C002DB57D /* CoreGraphics.framework */; };
28AD733F0D9D9553002E5188 /* MainWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 28AD733E0D9D9553002E5188 /* MainWindow.xib */; };
28D7ACF80DDB3853001CB0EB /* MWPhotoBrowser.m in Sources */ = {isa = PBXBuildFile; fileRef = 28D7ACF70DDB3853001CB0EB /* MWPhotoBrowser.m */; };
4C4156C61277301E00C96767 /* MainWindow-iPad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C4156C51277301E00C96767 /* MainWindow-iPad.xib */; };
4C48EFCD126F8DD900F85546 /* UIImage+Decompress.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C48EFCC126F8DD900F85546 /* UIImage+Decompress.m */; };
4C48EFD2126F90B100F85546 /* UIViewTap.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C48EFD1126F90B100F85546 /* UIViewTap.m */; };
4C667B2D1270AFCE0008B630 /* Menu.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C667B2C1270AFCE0008B630 /* Menu.m */; };
@@ -46,6 +47,7 @@
28D7ACF70DDB3853001CB0EB /* MWPhotoBrowser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MWPhotoBrowser.m; sourceTree = "<group>"; };
29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
32CA4F630368D1EE00C91783 /* MWPhotoBrowser_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWPhotoBrowser_Prefix.pch; sourceTree = "<group>"; };
4C4156C51277301E00C96767 /* MainWindow-iPad.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = "MainWindow-iPad.xib"; path = "Resources-iPad/MainWindow-iPad.xib"; sourceTree = "<group>"; };
4C48EFCB126F8DD900F85546 /* UIImage+Decompress.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+Decompress.h"; sourceTree = "<group>"; };
4C48EFCC126F8DD900F85546 /* UIImage+Decompress.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+Decompress.m"; sourceTree = "<group>"; };
4C48EFD0126F90B100F85546 /* UIViewTap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIViewTap.h; sourceTree = "<group>"; };
@@ -112,6 +114,7 @@
080E96DDFE201D6D7F000001 /* Classes */,
4C667CB31270D0E50008B630 /* Photos */,
29B97317FDCFA39411CA2CEA /* Resources */,
4C4156C41277301D00C96767 /* Resources-iPad */,
29B97315FDCFA39411CA2CEA /* Other Sources */,
29B97323FDCFA39411CA2CEA /* Frameworks */,
19C28FACFE9D520D11CA2CBB /* Products */,
@@ -151,6 +154,14 @@
name = Frameworks;
sourceTree = "<group>";
};
4C4156C41277301D00C96767 /* Resources-iPad */ = {
isa = PBXGroup;
children = (
4C4156C51277301E00C96767 /* MainWindow-iPad.xib */,
);
name = "Resources-iPad";
sourceTree = "<group>";
};
4C48EFD3126F90C600F85546 /* Categories */ = {
isa = PBXGroup;
children = (
@@ -273,6 +284,7 @@
4C667C461270C6A50008B630 /* UIBarButtonItemArrowLeft@2x.png in Resources */,
4C667C471270C6A50008B630 /* UIBarButtonItemArrowRight.png in Resources */,
4C667C481270C6A50008B630 /* UIBarButtonItemArrowRight@2x.png in Resources */,
4C4156C61277301E00C96767 /* MainWindow-iPad.xib in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -302,6 +314,7 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
COPY_PHASE_STRIP = NO;
GCC_DYNAMIC_NO_PIC = NO;
GCC_OPTIMIZATION_LEVEL = 0;
@@ -310,6 +323,8 @@
INFOPLIST_FILE = "MWPhotoBrowser-Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 3.0;
PRODUCT_NAME = MWPhotoBrowser;
SDKROOT = iphoneos4.1;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
};
@@ -317,12 +332,15 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
COPY_PHASE_STRIP = YES;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = MWPhotoBrowser_Prefix.pch;
INFOPLIST_FILE = "MWPhotoBrowser-Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 3.0;
PRODUCT_NAME = MWPhotoBrowser;
SDKROOT = iphoneos4.1;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
};
name = Release;

View File

@@ -21,6 +21,12 @@ See the code snippet below for an example of how to implement the photo browser.
MWPhotoBrowser *browser = [[MWPhotoBrowser alloc] initWithPhotos:photos];
[self.navigationController pushViewController:browser animated:YES];
If desired, you can choose which photo is displayed first:
// Create & present browser
MWPhotoBrowser *browser = [[MWPhotoBrowser alloc] initWithPhotos:photos];
[browser setInitialPageIndex:2]; // Show second page first
[self.navigationController pushViewController:browser animated:YES];
## Adding to your project

View File

@@ -0,0 +1,393 @@
<?xml version="1.0" encoding="UTF-8"?>
<archive type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="7.10">
<data>
<int key="IBDocument.SystemTarget">800</int>
<string key="IBDocument.SystemVersion">10F569</string>
<string key="IBDocument.InterfaceBuilderVersion">804</string>
<string key="IBDocument.AppKitVersion">1038.29</string>
<string key="IBDocument.HIToolboxVersion">461.00</string>
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="NS.object.0">123</string>
</object>
<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
<object class="NSArray" key="IBDocument.PluginDependencies">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
</object>
<object class="NSMutableDictionary" key="IBDocument.Metadata">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSArray" key="dict.sortedKeys" id="0">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
</object>
<object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBProxyObject" id="841351856">
<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
<string key="targetRuntimeIdentifier">IBIPadFramework</string>
</object>
<object class="IBProxyObject" id="427554174">
<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
<string key="targetRuntimeIdentifier">IBIPadFramework</string>
</object>
<object class="IBUICustomObject" id="664661524">
<string key="targetRuntimeIdentifier">IBIPadFramework</string>
</object>
<object class="IBUIWindow" id="117978783">
<nil key="NSNextResponder"/>
<int key="NSvFlags">292</int>
<string key="NSFrameSize">{768, 1004}</string>
<object class="NSColor" key="IBUIBackgroundColor">
<int key="NSColorSpace">1</int>
<bytes key="NSRGB">MSAxIDEAA</bytes>
</object>
<bool key="IBUIOpaque">NO</bool>
<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics">
<int key="IBUIStatusBarStyle">2</int>
</object>
<string key="targetRuntimeIdentifier">IBIPadFramework</string>
<bool key="IBUIResizesToFullScreen">YES</bool>
</object>
</object>
<object class="IBObjectContainer" key="IBDocument.Objects">
<object class="NSMutableArray" key="connectionRecords">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">delegate</string>
<reference key="source" ref="841351856"/>
<reference key="destination" ref="664661524"/>
</object>
<int key="connectionID">4</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">window</string>
<reference key="source" ref="664661524"/>
<reference key="destination" ref="117978783"/>
</object>
<int key="connectionID">14</int>
</object>
</object>
<object class="IBMutableOrderedSet" key="objectRecords">
<object class="NSArray" key="orderedObjects">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBObjectRecord">
<int key="objectID">0</int>
<reference key="object" ref="0"/>
<reference key="children" ref="1000"/>
<nil key="parent"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">-1</int>
<reference key="object" ref="841351856"/>
<reference key="parent" ref="0"/>
<string key="objectName">File's Owner</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">3</int>
<reference key="object" ref="664661524"/>
<reference key="parent" ref="0"/>
<string key="objectName">MWPhotoBrowser App Delegate</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">-2</int>
<reference key="object" ref="427554174"/>
<reference key="parent" ref="0"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">12</int>
<reference key="object" ref="117978783"/>
<reference key="parent" ref="0"/>
</object>
</object>
</object>
<object class="NSMutableDictionary" key="flattenedProperties">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>-1.CustomClassName</string>
<string>-2.CustomClassName</string>
<string>12.IBEditorWindowLastContentRect</string>
<string>12.IBLastUsedUIStatusBarStylesToTargetRuntimesMap</string>
<string>12.IBPluginDependency</string>
<string>3.CustomClassName</string>
<string>3.IBPluginDependency</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>UIApplication</string>
<string>UIResponder</string>
<string>{{525, 346}, {320, 480}}</string>
<object class="NSMutableDictionary">
<string key="NS.key.0">IBCocoaTouchFramework</string>
<integer value="0" key="NS.object.0"/>
</object>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string>MWPhotoBrowserAppDelegate</string>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
</object>
</object>
<object class="NSMutableDictionary" key="unlocalizedProperties">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference key="dict.sortedKeys" ref="0"/>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
</object>
<nil key="activeLocalization"/>
<object class="NSMutableDictionary" key="localizations">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference key="dict.sortedKeys" ref="0"/>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
</object>
<nil key="sourceID"/>
<int key="maxID">15</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<object class="NSMutableArray" key="referencedPartialClassDescriptions">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBPartialClassDescription">
<string key="className">MWPhotoBrowserAppDelegate</string>
<string key="superclassName">NSObject</string>
<object class="NSMutableDictionary" key="outlets">
<string key="NS.key.0">window</string>
<string key="NS.object.0">UIWindow</string>
</object>
<object class="NSMutableDictionary" key="toOneOutletInfosByName">
<string key="NS.key.0">window</string>
<object class="IBToOneOutletInfo" key="NS.object.0">
<string key="name">window</string>
<string key="candidateClassName">UIWindow</string>
</object>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">Classes/MWPhotoBrowserAppDelegate.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">MWPhotoBrowserAppDelegate</string>
<string key="superclassName">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBUserSource</string>
<string key="minorKey"/>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">UIWindow</string>
<string key="superclassName">UIView</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBUserSource</string>
<string key="minorKey"/>
</object>
</object>
</object>
<object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBPartialClassDescription">
<string key="className">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">Foundation.framework/Headers/NSError.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">Foundation.framework/Headers/NSFileManager.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">Foundation.framework/Headers/NSKeyValueCoding.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">Foundation.framework/Headers/NSKeyValueObserving.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">Foundation.framework/Headers/NSKeyedArchiver.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">Foundation.framework/Headers/NSObject.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">Foundation.framework/Headers/NSRunLoop.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">Foundation.framework/Headers/NSThread.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">Foundation.framework/Headers/NSURL.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">Foundation.framework/Headers/NSURLConnection.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">UIKit.framework/Headers/UIAccessibility.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">UIKit.framework/Headers/UINibLoading.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="356479594">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">UIKit.framework/Headers/UIResponder.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">UIApplication</string>
<string key="superclassName">UIResponder</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">UIKit.framework/Headers/UIApplication.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">UIResponder</string>
<string key="superclassName">NSObject</string>
<reference key="sourceIdentifier" ref="356479594"/>
</object>
<object class="IBPartialClassDescription">
<string key="className">UISearchBar</string>
<string key="superclassName">UIView</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">UIKit.framework/Headers/UISearchBar.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">UISearchDisplayController</string>
<string key="superclassName">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">UIKit.framework/Headers/UISearchDisplayController.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">UIView</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">UIKit.framework/Headers/UITextField.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">UIView</string>
<string key="superclassName">UIResponder</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">UIKit.framework/Headers/UIView.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">UIViewController</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">UIKit.framework/Headers/UINavigationController.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">UIViewController</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">UIKit.framework/Headers/UIPopoverController.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">UIViewController</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">UIKit.framework/Headers/UISplitViewController.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">UIViewController</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">UIKit.framework/Headers/UITabBarController.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">UIViewController</string>
<string key="superclassName">UIResponder</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">UIKit.framework/Headers/UIViewController.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">UIWindow</string>
<string key="superclassName">UIView</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">UIKit.framework/Headers/UIWindow.h</string>
</object>
</object>
</object>
</object>
<int key="IBDocument.localizationMode">0</int>
<string key="IBDocument.TargetRuntimeIdentifier">IBIPadFramework</string>
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS</string>
<integer value="800" key="NS.object.0"/>
</object>
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3</string>
<integer value="3100" key="NS.object.0"/>
</object>
<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
<string key="IBDocument.LastKnownRelativeProjectPath">MWPhotoBrowser.xcodeproj</string>
<int key="IBDocument.defaultPropertyAccessControl">3</int>
<string key="IBCocoaTouchPluginVersion">123</string>
</data>
</archive>