Latest 1.1.0
License BSD
Platforms ios 8.0


Platform: iOS 8+Language: Swift 3
CocoaPods compatible
License: BSD


Panel is a a simple, Snapchat inspired ViewController subclass. Panel allows you to add you own custom ViewControllers to an embedded ScrollView. Panel allows complete control over the presentaion of the panels.


  • iOS 8.0+
  • Swift 3.0+


Panel is available under the BSD license. See the LICENSE file for more info.



Panel is available through CocoaPods. To install
it, simply add the following line to your Podfile:

pod "Panel"

Manual Installation:

Simply copy the contents of the Source folder into your project.


Using Panel is very simple.

Getting Started:

If you have installed via Cocoapods, be sure to include

import Panel

Create a View Controller, and set its subclass to be PanelViewController:

class MyViewController: PanelViewController {


Adding View Controllers:

To add your own ViewControllers, your container ViewController must conform to the PanelViewControllerDataSource protocol:

class MyViewController: PanelViewController, PanelViewControllerDataSource {   


The container ViewController must also set itself as the dataSource delegate in ViewDidLoad:

override func viewDidLoad() {

    // Datasource to set our ViewControllers
    dataSource = self

PanelViewControllerDataSource has one required protocol functions which must be implemented: PanelViewDidSetViewControllers(). PanelViewDidSetViewControllers() expects a return type of [UIViewController]. Panel requires three ViewControllers be returned in this array, in the order you wish to have them displayed:

func PanelViewDidSetViewControllers() -> [UIViewController] {

  // Add your own custom View Controllers here 

    viewController1 = UIViewController()
    viewController2 = UIViewController()
    viewController3 = UIViewController()

    let panelArray = [viewController1, viewController2, viewController3]

    // Will be displayed in order: [LeftPanel, CenterPanel, RightPanel]

    return panelArray

Manually Moving to Panel

If you wish to animate to particular panel from inside your container ViewController, you can use the animateTo(panel:) function:

moveTo(panel: .left)

Additionally, if you wish to have one of the panel ViewControllers animate to another panel, you can use the PanelViewControllerDelegate property.

Within the panel ViewController’s decleration, add a delegate property of optional type PanelViewControllerDelegate:

var delegate: PanelViewControllerDelegate?

When declaring the container ViewControllers dataSource, set the panel’s delegate to the container ViewController:

func PanelViewDidSetViewControllers() -> [UIViewController] {

   viewController1 = CustomViewController()

   // set the ViewController's delegate to the 
   // container ViewController

   viewContoller1.delegate = self


Once the delegate is set, you can animate the panels by calling the delegate function PanelViewControllerAnimateTo(panel:):

delegate?.PanelViewControllerAnimateTo(panel: .left)


If you wish to know the position of the container ScrollView as it scrolls, you can implement the optional PanelViewControllerDataSource function PanelViewControllerDidScroll(offSet:). This will return the offSet CGFloat between -1.0 and 1.0:

func PanelViewControllerDidScroll(offSet: CGFloat) {
     // Offset is a float between -1.0 to 1.0 
     // depending on the position of ScrollView. 
     // -1.0 is centered on left panel
     // 0.0 is centered on central panel
     // 1.0 is centered on right panel


If you have any questions, requests, or enhancements, feel free to submit a pull request, create an issue, or contact me in person:

Andrew Walz[email protected]

Latest podspec

    "name": "Panel",
    "version": "1.1.0",
    "summary": "A simple, Snapchat inspired, scroll based View Controller Written in Swift",
    "platforms": {
        "ios": "8.0"
    "description": "Panel is a smiple, scroll based View Controller subclass. Panel was inspired by the three panel layout of Snapchat.",
    "homepage": "",
    "license": {
        "type": "BSD",
        "file": "LICENSE"
    "authors": {
        "Andrew Walz": "[email protected]"
    "source": {
        "git": "",
        "tag": "1.1.0"
    "source_files": "Source/**/*",
    "pushed_with_swift_version": "3.0"

Pin It on Pinterest

Share This