Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/andresinaka/SnapTimer

Implementation of Snapchat's stories timer.
https://github.com/andresinaka/SnapTimer

animation completion-handler snapchat-stories timer

Last synced: about 1 month ago
JSON representation

Implementation of Snapchat's stories timer.

Awesome Lists containing this project

README

        

![SnapTimer](images/snaptimer-logo.png)

# SnapTimer

SnapTimer is a custom UIView that behaves exactly the same as the one on Snapchat's stories.

[![Build Status](https://travis-ci.org/andresinaka/SnapTimer.svg?branch=master)](https://travis-ci.org/andresinaka/SnapTimer) [![codecov.io](https://codecov.io/github/andresinaka/SnapTimer/badge.svg?branch=master)](https://codecov.io/github/andresinaka/SnapTimer?branch=master)

```
Swift 3.0 Support on master branch! 👌👌
Swift 2.3 Support on Swift2.3.
```

## Features

- Two different timers, 'outer' and 'inner'.
- Independent animations for each of the timers.
- Customizable colors.
- Completion handlers.
- Fully Swift.

# What does it look like?

> A picture is worth a thousand words

![samples](images/sample-timers.png)

# Installation

You can just clone the repo and copy the ```SnapTimer``` folder to your project or you can use one of the following options:

### Setting up with [CocoaPods](http://cocoapods.org/)

```ruby
pod 'SnapTimer'
```

Then:

```swift
import SnapTimer
```

And you are all set!

### Setting up with [Carthage](https://github.com/Carthage/Carthage)

- TODO

# How do I add it?

1. Add a `UIView` to your Storyboard.
2. Select the view, go to the `Identity Inspector` and set the class to `SnapTimerView`

![identity-inspector](images/identity-inspector.png)

3. Create an `@IBOutlet` in your view controller and that's it.

`SnapTimerView` implements `@IBDesignable` so the view should automatically render in your Interface Builder. Also it implements `@IBInspectable` for the view properties:

![properties](images/properties.png)

4. That's it!

### Setting inner and outer values

**innerValue** and **outerValue** ranges go from 0 to 100.

* To set values without animations you just have to:

```swift
self.snapTimerView.outerValue = 25
self.snapTimerView.innerValue = 50
```
![ej1](images/ej1.gif)

* To animate values:

```swift
self.snapTimerView.animateOuterValue(50)
self.snapTimerView.animateInnerValue(25)
```
![ej1](images/ej2.gif)

* To animate values setting the time and a completion handler:

```swift
self.snapTimerView.animateOuterToValue(50, duration: 30) {
puts("Done!")
}

self.snapTimerView.animateInnerToValue(100, duration: 30) {
puts("Done!")
}
```

### Pausing and resuming animations:

if your app goes to background or the Notifications/Control center are opened you may want to pause the animations, to do that SnapTimer has two handy methods:

```swift
self.snapTimerView.resumeAnimation()
self.snapTimerView.pauseAnimation()
```

# Check the sample project!

![samples](images/ej3.gif)

# Cool ways to improve it?

Hey, If you have cool ideas to add to this please feel free to send a PR! Also if you are using this in your app and what to let me know I'll be happy to add a section here with the apps currently using this!