iOS开源:Paparazzo - 拍照、选取、编辑图片于一身的精简、实用组件
auus1900
8年前
<p>Paparazzois a component for picking and editing photos.</p> <table> <thead> <tr> <th> </th> <th>Key Features</th> </tr> </thead> <tbody> <tr> <td>:camera:</td> <td>Taking photos using camera</td> </tr> <tr> <td>:iphone:</td> <td>Picking photos from user's photo library</td> </tr> <tr> <td>:scissors:</td> <td>Photo cropping and rotation</td> </tr> </tbody> </table> <p style="text-align:center"><img src="https://simg.open-open.com/show/640dfde358a0dc302980659015de8122.gif"></p> <h2>Contents</h2> <ul> <li>Installation</li> <li>Usage <ul> <li>Presenting entire module <ul> <li>Additional parameters of MediaPicker module</li> <li>Memory constraints when cropping</li> </ul> </li> <li>Presenting photo library</li> <li>UI Customization</li> </ul> </li> </ul> <h2>Installation</h2> <p> </p> <p>There are two options to install Paparazzo using <a href="/misc/goto?guid=4958869288453138992" rel="nofollow,noindex">CocoaPods</a> .</p> <p>Using <a href="/misc/goto?guid=4959739926218099272" rel="nofollow,noindex">Marshroute</a> :</p> <pre> <code class="language-swift">pod "Paparazzo"</code></pre> <p>or if you don't use Marshroute and prefer not to get it as an additional dependency:</p> <pre> <code class="language-swift">pod "Paparazzo/Core"</code></pre> <h2>Usage</h2> <p>You can use either the entire module or photo library exclusively.</p> <h3>Presenting entire module</h3> <p>Initialize module assembly using Paparazzo.AssemblyFactory (or Paparazzo.MarshrouteAssemblyFactory if you use Marshroute):</p> <pre> <code class="language-swift">let factory = Paparazzo.AssemblyFactory() let assembly = factory.mediaPickerAssembly()</code></pre> <p>Create view controller using assembly's module method:</p> <pre> <code class="language-swift">let viewController = assembly.module( items: items, selectedItem: selectedItem, maxItemsCount: maxItemsCount, cropEnabled: true, cropCanvasSize: cropCanvasSize, routerSeed: routerSeed, // omit this parameter if you're using AssemblyFactory configuration: configuration )</code></pre> <p>Method parameters:</p> <ul> <li><em>items</em> — array of photos that should be initially selected when module is presenter.</li> <li><em>selectedItem</em> — selected photo. If set to nil or if <em>items</em> doesn't contain any photo with matching <em>identifier</em> , then the first photo in array will be selected.</li> <li><em>maxItemsCount</em> — maximum number of photos that user is allowed to pick.</li> <li><em>cropEnabled</em> — boolean flag indicating whether user can perform photo cropping.</li> <li><em>cropCanvasSize</em> — maximum size of canvas when cropping photos. (see Memory constraints when cropping).</li> <li><em>routerSeed</em> — routerSeed provided by Marshroute.</li> <li><em>configuration</em> — closure that allows you to providemodule's additional parameters.</li> </ul> <p>Additional parameters of MediaPicker module</p> <p>Additional parameters is described in protocol MediaPickerModule :</p> <ul> <li>setContinueButtonTitle(_:) and setContinueButtonEnabled(_:) allow to customize "Continue" button text and availability.</li> <li>onItemsAdd is called when user picks items from photo library or takes a new photo using camera.</li> <li>onItemUpdate is called after user performed cropping.</li> <li>onItemRemove is called when user deletes photo.</li> <li>onFinish and onCancel is called when user taps Continue and Close respectively.</li> </ul> <p>Memory constraints when cropping</p> <p>When cropping photo on devices with low RAM capacity your application can crash due to memory warning. It happens because in order to perform actual cropping we need to put a bitmap of the original photo in memory. To descrease a chance of crashing on older devices (such as iPhone 4 or 4s) we can scale the source photo beforehand so that it takes up less space in memory. <em>cropCanvasSize</em> is used for that. It specifies the size of the photo we should be targeting when scaling.</p> <h3>Presenting photo library</h3> <p>Initialize module assembly using Paparazzo.AssemblyFactory (or Paparazzo.MarshrouteAssemblyFactory if you use Marshroute):</p> <pre> <code class="language-swift">let factory = Paparazzo.AssemblyFactory() let assembly = factory.photoLibraryAssembly()</code></pre> <p>Create view controller using assembly's module method:</p> <pre> <code class="language-swift">let viewController = assembly.module( selectedItems: selectedItems, maxSelectedItemsCount: maxSelectedItemsCount, routerSeed: routerSeed, // omit this parameter if you're using AssemblyFactory configuration: configuration )</code></pre> <ul> <li><em>selectedItems</em> — preselected photos (or nil ).</li> <li><em>maxItemsCount</em> — maximum number of photos that user is allowed to pick.</li> <li><em>routerSeed</em> — routerSeed provided by Marshroute.</li> <li><em>configuration</em> — closure used to provide additional module setup.</li> </ul> <h3>UI Customization</h3> <p>You can customize colors, fonts and icons used in photo picker. Just pass an instance of PaparazzoUITheme to the initializer of assembly factory.</p> <pre> <code class="language-swift">var theme = PaparazzoUITheme() theme.shutterButtonColor = .blue theme.accessDeniedTitleFont = .boldSystemFont(ofSize: 17) theme.accessDeniedMessageFont = .systemFont(ofSize: 17) theme.accessDeniedButtonFont = .systemFont(ofSize: 17) theme.cameraContinueButtonTitleFont = .systemFont(ofSize: 17) theme.cancelRotationTitleFont = .boldSystemFont(ofSize: 14) let assemblyFactory = Paparazzo.AssemblyFactory(theme: theme)</code></pre> <h2>Author</h2> <p>Andrey Yutkin ( <a href="/misc/goto?guid=4959739926310581500" rel="nofollow,noindex">ayutkin@avito.ru</a> )</p> <h2>License</h2> <p>MIT</p> <p> </p>