     
     // 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

        initialSetupWithInitialPhoto(nil)
    }
    
    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 {
    
    /* 
     * Returns the view from which to animate for object conforming to INSPhotoViewable 
     */
    public var referenceViewForPhotoWhenDismissingHandler: INSPhotosViewControllerReferenceViewHandler?
    
    /*
     * Called when a new photo is displayed through a swipe gesture.
     */
    public var navigateToPhotoHandler: INSPhotosViewControllerNavigateToPhotoHandler?
    
    /*
     * Called before INSPhotosViewController will start a user-initiated dismissal.
     */
    public var willDismissHandler: INSPhotosViewControllerDismissHandler?
    
    /*
     * Called after the INSPhotosViewController has been dismissed by the user.
     */
    public var didDismissHandler: INSPhotosViewControllerDismissHandler?
    
    /*
     * Called when a photo is long pressed.
     */
    public var longPressGestureHandler: INSPhotosViewControllerLongPressHandler?
    
    /*
     * The overlay view displayed over photos, can be changed but must implement INSPhotosOverlayViewable
     */
    public var overlayView: INSPhotosOverlayViewable = INSPhotosOverlayView(frame: CGRect.zero) {
        willSet {
            overlayView.view().removeFromSuperview()
