         initialSetupWithInitialPhoto(nil)
     }
     
+    /**
+     The designated initializer that stores the array of objects implementing INSPhotoViewable
+     
+     - parameter photos:        An array of objects implementing INSPhotoViewable.
+     - parameter initialPhoto:  The photo to display initially. Must be contained within the `photos` array.
+     - parameter referenceView: The view from which to animate.
+     
+     - returns: A fully initialized object.
+     */
     public init(photos: [INSPhotoViewable], initialPhoto: INSPhotoViewable? = nil, referenceView: UIView? = nil) {
         dataSource = INSPhotosDataSource(photos: photos)
         super.init(nibName: nil, bundle: nil)



public class INSPhotosViewController: UIViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate, UIViewControllerTransitioningDelegate {

    public var referenceViewForPhotoWhenDismissingHandler: INSPhotosViewControllerReferenceViewHandler?
    public var navigateToPhotoHandler: INSPhotosViewControllerNavigateToPhotoHandler?
    public var willDismissHandler: INSPhotosViewControllerDismissHandler?
    public var didDismissHandler: INSPhotosViewControllerDismissHandler?
    public var longPressGestureHandler: INSPhotosViewControllerLongPressHandler?
    
    public var overlayView: INSPhotosOverlayViewable = INSPhotosOverlayView(frame: CGRect.zero) {
        willSet {
            overlayView.view().removeFromSuperview()

    
    // MARK: - Public
    
    /**
     Displays the specified photo. Can be called before the view controller is displayed. Calling with a photo not contained within the data source has no effect.
     
     - parameter photo:    The photo to make the currently displayed photo.
     - parameter animated: Whether to animate the transition to the new photo.
     */
    public func changeToPhoto(photo: INSPhotoViewable, animated: Bool) {
        if !dataSource.containsPhoto(photo) {
            return
