/
group___nimbus_photos.html
150 lines (129 loc) · 9.35 KB
/
group___nimbus_photos.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>Nimbus: Nimbus Photos</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="stylesheet.css" rel="stylesheet" type="text/css" />
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-24278774-1']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
</head>
<body>
<div id="page">
<div style="position:relative">
<div id="top"><!-- do not remove this div! -->
<div id="titlearea">
<a style="float: right;margin-right:20px;margin-top:20px" href='http://www.pledgie.com/campaigns/15519'><img alt='Click here to support Nimbus development and make a donation at www.pledgie.com !' src='http://www.pledgie.com/campaigns/15519.png?skin_name=chrome' border='0' /></a>
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td style="padding-left: 0.5em;">
<div id="projectname">Nimbus
 <span id="projectnumber">0.9.1 - <a href="http://github.com/jverkoey/nimbus">Nimbus is proudly hosted on Github</a></span>
</div>
<div id="projectbrief">An iOS framework whose growth is bounded by O(documentation).</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- Generated by Doxygen 1.7.4-20110629 -->
</div>
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
initNavTree('group___nimbus_photos.html','');
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#groups">Modules</a> </div>
<div class="headertitle">
<div class="title">Nimbus Photos</div> </div>
</div>
<div class="contents">
<hr/><a name="details" id="details"></a><h2>Overview</h2>
<p>Photo viewers are a common, non-trivial feature in many types of iOS apps ranging from simple photo viewers to apps that fetch photos from an API. </p>
<p>The <a class="el" href="interface_nimbus.html" title="The Nimbus state interface.">Nimbus</a> photo album viewer is designed to consume minimal amounts of memory and encourage the use of threads to provide a high quality user experience that doesn't include any blocking of the UI while images are loaded from disk or the network. The photo viewer pre-caches images in an album to either side of the current image so that the user will ideally always have a high-quality photo experience.</p>
<h2>Adding the Photos Feature to Your Application</h2>
<p>The <a class="el" href="interface_nimbus.html" title="The Nimbus state interface.">Nimbus</a> Photos feature uses a small number of custom photos that are stored in the NimbusPhotos bundle. You must add this bundle to your application, ensuring that you select the "Create Folder References" option and that the bundle is copied in the "Copy Bundle Resources" phase.</p>
<p>The bundle can be found at <code>src/photos/resources/NimbusPhotos.bundle</code>.</p>
<h2>Feature Breakdown</h2>
<p><a class="el" href="interface_n_i_photo_album_scroll_view.html" title="A paged scroll view that shows a collection of photos.">NIPhotoAlbumScrollView</a> - A paged scroll view that implements a data source similar to that of UITableView. This scroll view consumes minimal amounts of memory and is built to be fast and responsive.</p>
<p><a class="el" href="interface_n_i_photo_scroll_view.html" title="A single photo view that supports zooming and rotation.">NIPhotoScrollView</a> - A single page within the <a class="el" href="interface_n_i_photo_album_scroll_view.html" title="A paged scroll view that shows a collection of photos.">NIPhotoAlbumScrollView</a>. This view implements the zooming and rotation functionality for a photo.</p>
<p><a class="el" href="interface_n_i_photo_scrubber_view.html" title="A control built for quickly skimming through a collection of images.">NIPhotoScrubberView</a> - A scrubber view for skimming through a set of photos. This view made its debut by Apple on the iPad in Photos.app. Nimbus' implementation of this view is built to be responsive and consume little memory.</p>
<p><a class="el" href="interface_n_i_toolbar_photo_view_controller.html" title="A simple photo album view controller implementation with a toolbar.">NIToolbarPhotoViewController</a> - A skeleton implementation of a view controller that includes multiple configurable properties. This controller will show a scrubber on the iPad and next/previous arrows on the iPhone. It also provides support for hiding and showing the app's chrome. If you wish to use this controller you must simply implement the data source for the photo album. NetworkPhotoAlbum in the examples/photos directory demos building a data source that fetches its information from the network.</p>
<h2>Architecture</h2>
<p>The architectural design of the photo album view takes inspiration from UITableView. Images are requested only when they might become visible and are released when they become inaccessible again. Each page of the photo album view is a recycled <a class="el" href="interface_n_i_photo_scroll_view.html" title="A single photo view that supports zooming and rotation.">NIPhotoScrollView</a>. These page views handle zooming and panning within a given photo. The photo album view <a class="el" href="interface_n_i_photo_album_scroll_view.html" title="A paged scroll view that shows a collection of photos.">NIPhotoAlbumScrollView</a> contains a paging scroll view of these page views and provides interfaces for maintaining the orientation during rotations.</p>
<p>The view controller <a class="el" href="interface_n_i_toolbar_photo_view_controller.html" title="A simple photo album view controller implementation with a toolbar.">NIToolbarPhotoViewController</a> is provided as a basic implementation of functionality that is expected from a photo viewer. This includes: a toolbar with next and previous arrows; auto-rotation support; and toggling the chrome.</p>
<h2>Example Applications</h2>
<h3>Network Photo Albums</h3>
<p><a href="https://github.com/jverkoey/nimbus/tree/master/examples/photos/NetworkPhotoAlbums">View the README on GitHub</a></p>
<p>This sample application demos the use of the multiple photo APIs to fetch photos from public photo album and display them in high-definition on the iPad and iPhone.</p>
<p>The following APIs are currently demoed:</p>
<ul>
<li>Facebook Graph API</li>
<li>Dribbble Shots</li>
</ul>
<p>Sample location: <code>examples/photos/NetworkPhotoAlbums</code></p>
<h2>Screenshots</h2>
<div class="image">
<img src="photos-iphone-example1.png" alt="photos-iphone-example1.png"/>
<div class="caption">
Screenshot of a basic photo album on the iPhone.</div></div>
<p> Image source: <a href="http://www.flickr.com/photos/janekm/360669001/">flickr.com/photos/janekm/360669001</a> </p>
<table class="memberdecls">
<tr><td colspan="2"><h2><a name="groups"></a>
Modules</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group___photos-_views.html">Photo Views</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group___photos-_protocols.html">Photo Protocols</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group___photos-_controllers.html">Photo View Controllers</a></td></tr>
</table>
<div id="disqus_thread"></div></div>
</div>
<div id="nav-path" class="navpath">
<ul>
</div><!-- .fixedwidth -->
<script type="text/javascript">
/* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE * * */
var disqus_shortname = 'nimbusdocumentation'; // required: replace example with your forum shortname
// The following are highly recommended additional parameters. Remove the slashes in front to use.
// var disqus_identifier = 'unique_dynamic_id_1234';
// var disqus_url = 'http://example.com/permalink-to-page.html';
/* * * DON'T EDIT BELOW THIS LINE * * */
(function() {
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
})();
</script>
<span class="footer">Generated for Nimbus by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4-20110629 </span>
</ul>
</div>
</div> <!-- page -->
</body>
</html>