Challenge Overview

Summary

This challenge will be focused on building the UI and related functionality for the Leaderboard screens.  For all api calls please use the Apiary documentation.  Reference the Invision Design for application look/feel and navigation flow.

Main Leaderboard Screen

-- This screen allows the user to view the top leaderboards for a specific park or all parks.
-- Upon opening this screen, the leaderboards should animate, initially all being the same length only displaying the rank, then animating to a length based off the rank.
    -- The current user should always be orange.
    -- 1st place should be blue, unless the current user holds the top position.
    -- Other positions should be grey, unless it is the current user
    -- If the current user is in the top 3, display the top 4 for that location.
    -- if the current user is not in the top 3, display the top 3 plus the user in the 4th position.
-- Tapping on the menu should open the left side navigation panel.
    -- The user can also open the side navigation panel by a gesture (match the profile screen).
-- The top menu should allow the user to navigate through the different leaderboards.
    -- Currently there are two, Open Jump, and Ultimate Dodgeball (see data section).
    -- Default should be Open Jump.
-- The leaderboard line items should display the user’s handle, ranking data, place and photo.
    -- If the user does not have a photo the placeholder image should be used.
-- There should be a UIPickerView that shows the different leaderboards the user can choose from. 
    -- “All Sky Zones” should always be available.
    -- The other parks are pulled from the current user’s profile.
    -- See the profile section in Apiary.
    -- If the user does not have parks to choose from (e.g. new user)  then only All Sky Zones will be available and the user will not have a rank.
    -- When the user selects a new location, the view should reload with appropriate loading animation, then re-animate the leaderboard line items.
-- View All button should open up a new view as a fullscreen modal. The modal should match the design and the other modal in the application (see, book jump time, settings and payments & funds).

View All Leaderboard Modal Screen

-- This screen allows the user to view an entire leaderboard.
-- This view should load with the user’s rank in the middle.
    -- initially the view should load 10 above and 10 below the user’s position.
    -- This number should be a constant that can be easily changed.
-- This table should provide infinite scrolling, loading more users and it scrolls up or down.
    -- See data section.
-- The view should load with the location that the user had selected on the opening screen
-- The right and left arrow should allow the user to change location
    -- This is the same as the UIPIckerView on the previous screen.
    -- All Sky Zones should always be available.
-- The current user’s table cell should be highlighted grey and orange.
-- The button “Buy Jump Time” should:
    -- Navigate to the park info screen if viewing an individual park
    -- Navigate to the find park screen if viewing the leaderboard for all parks
    -- See bookjumptime.storyboard.
-- Table cells for other user’s should show the rank, photo or placeholder, handle, ranking data, and ranking data difference.
    -- If difference is positive it should be green, negative should be red.

Assets

All image assets required for this challenge should already be in the application bundle.  If you believe something is missing, please post to the forums.

Navigation

The user should be able to navigate to the leaderboard section from either the radial menu (bottom of Profile screen) or from the Profile screen itself. The Leaderboard screen should then replace the current view controller and have the functionality to open the side navigation menu. The Leaderboard screen should also have the bottom radial menu.

Data

Data for this app currently comes from the mock service in Apiary. For this challenge focus on the following endpoints:

Leaderboards - this endpoint will provide all the data needed for leaderboards
Authentication - the recent park section of the response for create/login is new. This will need to be implemented in the existing data model. It is needed for knowing what parks are available to the user in Leaderboards.

Please be sure to mimic the existing REST service handling that exists in the application. Core API and DataSources in the project.

Submission

Prior to submission, merge the dev branch into the Leaderboard branch in your forked repository.

Setup
-- Send an email to blainer and harrywynn request to be added to the Sky Zone team on Gitlab if you are not already a member
-- Once added to the team, fork the repository and work off of the Leaderboard branch
-- Add blainer and harrywynn as members of your forked repository
-- Reference the Invision mockups here for look/feel and navigation flow



Final Submission Guidelines

-- All code should be written in Swift and be well commented
-- Use the workspace setup in the repository for development
-- Code must compile against iOS SDK 8.3 with a target for 8.0
-- Use auto layout and size classes to fit 5s, 6 & 6 Plus iPhone devices
-- Use storyboards for all views and navigation, please create a new storyboard for this MVC and provide code to access it in the ContainterViewController file. There is an extension to UIStoryboard at the end of the file.

-- Please make sure all storyboards are ready to be localized and all string are localized using NSLocalizedString and the Localizable.strings file. Nothing needs to be translated. 
-- Application should be locked to portrait orientation
-- Upload your source project as a zip
-- Include your Gitlab username and URL of your forked repository in your documentation
-- Provide a video overview of your submission
-- Upon being selected as the winner you will be required to do a merge request on Gitlab

ELIGIBLE EVENTS:

2015 topcoder Open

REVIEW STYLE:

Final Review:

Community Review Board

Approval:

User Sign-Off

SHARE:

ID: 30049811