ImageViewer v2.0 Release Notes

    • Multiple Images: Show as many images as you want in a single run.
    • โš  Intelligent memory handling: Thanks to behind the scenes used UIPageViewController's dataSource handling, you will never experience memory warnings caused by this component. The underlying view controllers that support detail image manipulation are loaded lazily and there is never more than 4-5 of them occupying precious memory space.
    • ๐Ÿ’ป Asynchronous background thread image loading: In ImageViewer 1.2 you had to designate an object that conformed to our ImageProvider protocol, the viewer would then ask your object to provide an image. This protocol is now extended with a function to ask for an image at a particular index. We now guarantee that the process will not block the main thread and thus the UI.
    • Completions blocks: To be able to hook up onto the presentation lifecycle - i.e. launch, image landing, close & swipe to dismiss states - we provide convenient completion blocks. These are exposed as optional properties and are not part of designated initializer.
    • ๐Ÿ‘€ Decoration views: You can now set your own Close button implementation. Additionally the viewer has a concept of header and footer views. These are both opaque from the viewer's perspective, they can be any UIView subclass. Both are exposed as optional properties. They sit on top of individual images. See our built-in project example using a simple image counter as a centred header view.
    • Decoration views hiding: Single tap the viewer's area to show/hide all decoration views.
    • ๐Ÿ”ง Expanded configuration options: We have expanded the list of visual related options that are now configurable.

    Config options

    • Paging Mode: Set the viewer to either go from first to last image or work in a carousel mode in an infinite loop.
    • ๐Ÿ“Œ Decoration view pinning: You can choose what kind of layout behaviour serves your needs best. Close button, header & footer views can all be pinned to left or right or kept in the centre.
    • Spine width: Set the width of the spine that separates images from each other.
    • Hide status bar: You can hide the status bar while the gallery is visible.
    • Hide decoration views initially: You can set the decoration views to be hidden on start.
    • ๐Ÿ’… Spinner customization: We are showing an activity indicator while the image is loading. You can set its style and color.
    • Horizontal swipe to dismiss: If you run the viewer in Standard (non-carousel) mode, once you reach the beginning or the end of image collection, the next horizontal swipe will dismiss the whole viewer. This gesture is interactive and cancelable.
    • Image displacement: Displacement still works, we now also keep track of the displaced image index, that means if you page back and forth through images, and you page to the originally displaced image, tapping the close button will return the image to its position in the parent view. Closing with any other image uses the standard cross-dissolve transition.
    • ๐Ÿ‘ Host app rotation support: Previously, we handled rotations separately from the host app. We kept this, meaning you can still get rotations for a portrait only app, but now we also support being hosted in an app that has rotations enabled globally.
    • Butter smooth & super fast rotation re-layout with correct anchor points: All the views in a view hierarchy follow the most logical paths when resizing (because of rotation), images rotate around their natural centers all thanks to the magic of manual layout. (Sorry auto-layout engine, you are a bit slow on a 4S)
    • Transition to current rotated state: Tapping any image in your parent view will launch the viewer in a rotated state and displace the image while rotating it to its desired position at the same time. We couldn't resist :)