Add progress bars to gifs!

Overview

Add progress bars to gifs!

App Store Download | About | Features | Usage | Contributing | License

😀  Thanks to everyone who contributed during Hacktoberfest 2020!

App Store Download

Download ProgressGif on the App Store.


About

For the writers and bloggers out there

Tutorials with only words are boring, so we add images. And if they need to be more detailed, we add video... but video isn't always the best choice.

  • Readers may not want to turn on audio
  • If they're on their phone, the video will open in a full-screen modal, which disrupts the reading experience
  • Some blogging sites don't allow video embeds

That's why we use GIFs instead! (Well yes, GIFs are memory-inefficient, but they're really convenient, and ProgressGif has options for framerate...)

ProgressGif is an iOS app made with Swift and UIKit, inspired by this article.

Why not SwiftUI?

SwiftUI would have be fine for building the UI, but because there's a lot of under-the-hood work with video rendering, I thought it would be better to just go with UIKit.


Features

ProgressGif does one thing only: Add progress bars to GIFs.

Example 1 Example 2 Example 3 Example 4 Example 5 Example 6
Example1 Example2 Example3 Example4 Example5 Example6

Yeah, that's it. ProgressGif serves one purpose, and one purpose only... but in a highly customizable way. Customize height, bar color, bar background color, edge inset, corner radius… and shadows are in beta.


Usage

Step 1 Step 2 Step 3
Import video Add the bar Export
Step1 Step2 Step3

GIFs generated by ProgressGif


Contributing

All contributions are welcome. Here's some harder issues that I need help on:

  • Horizontal layout
  • Allow picking colors with transparency
  • Allow picking opaque color for background (so that shadows show up)
  • Export as MOV instead of just GIF only

Steps:

  1. Fork the repo
  2. Clone into Xcode, see here
    1. Open Xcode's "Welcome to Xcode" screen (Window → Welcome to Xcode)
    2. Click "Clone an existing project"
    3. Enter the repository URL into the text field, then press "clone" (just stay on the main branch)
    4. Open the terminal, and navigate to the project directory, where the .xcodeproj file is
    5. If you haven't already, download CocoaPods by typing in sudo gem install cocoapods in the terminal
    6. Type pod install to install the dependencies
    7. Open the .xcworkspace file
  3. Make your changes (just stick on the main branch)
  4. Make a pull request
  5. Add yourself to the Contributors screen in the app!
let aheze = Contributor()
aheze.name = "Zheng"
aheze.additions = 199405
aheze.deletions = 29470
aheze.profileName = "ahezeProfile" /// name of your profile pic
aheze.linkImageName = "Medium"
if let profileURL = URL(string: "https://aheze.medium.com/") {
    aheze.link = profileURL
}
contributors.append(aheze)

Contributors screenshot

Don't forget to add your profile pic inside Contributing.xcassets!

If you have any questions, feel free to open an issue, or leave a comment somewhere!

License

MIT License

Copyright (c) 2021 A. Zheng

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

ProgressGif is inspired by this awesome article.

Comments
  • Plus button background doesn't change when Dark Mode is toggled

    Plus button background doesn't change when Dark Mode is toggled

    If Dark Mode is toggled while in the app, the plus button does not change with it.

    Load into dark mode

    image

    Switch to light mode

    image

    Close app and reopen in light mode

    image

    bug 
    opened by thejayhaykid 7
  • Added taptic success feedback when conversion is finished

    Added taptic success feedback when conversion is finished

    Added taptic success feedback when conversion is finished and also I allowed downloads using http protocol. I can exlude this change from PR, but to me it seems unreasonable to prevent user from using non-SSL servers to fetch videos.

    opened by mcblooder 5
  • Make dark mode look better

    Make dark mode look better

    Currently the steppers look pretty... not good-looking 😅 Exhibit 1 | Exhibit 2 | Exhibit 3 --- | --- | --- | |

    It's a weird poop color. Anyone got a better color palette? Inside Assets.xcassets:

    enhancement help wanted good first issue 
    opened by aheze 5
  • Add haptic feedback when export finishes

    Add haptic feedback when export finishes

    Currently, this is what happens when export finishes: It would be nice to have a haptic click when the Export button pops up!

    Relavent file, what to edit:

    UIView.animate(withDuration: 0.6, animations: {
        self.processingLabel.alpha = 1
        self.imageView.alpha = 1
    })
    
    /// Add haptic code here!
    
    self.exportButton.transform = CGAffineTransform(scaleX: 0.8, y: 0.8)
    UIView.animate(withDuration: 1, delay: 0.4, usingSpringWithDamping: 0.9, initialSpringVelocity: 0.5, options: .curveLinear, animations: {
        self.exportButton.alpha = 1
        self.exportButton.transform = CGAffineTransform.identity
    }, completion: nil)
    
    enhancement help wanted good first issue 
    opened by aheze 4
  • Updated Stepper Colour Palette

    Updated Stepper Colour Palette

    I updated the colour palette of the stepper controls to better match the UI for both light and dark mode as well as for better readability. The values being presented over a coloured background made it a bit difficult to read under certain circumstances.

    opened by tiannahenrylewis 3
  • Display Gif size when export finishes

    Display Gif size when export finishes

    When the export finishes, you don't know how big the file is.

    The "Export!" button should say the file size. Something like "Export! (10mb)" would work!

    Currently you can get the file size (already formatted) like this:

    let fileSize = exportedGifURL.fileSizeString
    print("fileSize: \(fileSize)")
    

    Relevant file, what to edit:

    UIView.animate(withDuration: 0.6, animations: {
        self.processingLabel.alpha = 1
        self.imageView.alpha = 1
    })
    
    /// set `self.exportButton`'s title here (add the file size)
    
    self.exportButton.transform = CGAffineTransform(scaleX: 0.8, y: 0.8)
    UIView.animate(withDuration: 1, delay: 0.4, usingSpringWithDamping: 0.9, initialSpringVelocity: 0.5, options: .curveLinear, animations: {
        self.exportButton.alpha = 1
        self.exportButton.transform = CGAffineTransform.identity
    }, completion: nil)
    
    enhancement help wanted good first issue 
    opened by aheze 3
  • Update ProgressGif Website

    Update ProgressGif Website

    This PR updates the ProgressGif GitHub Pages website. The changes consist of:

    • Made README the same as the one in the main branch
    • Added the support and privacy policy pages to the navigation
    • Added a header and navigation to the support page
    • Added navigation, turned section headers into headings, and simplified section names on the privacy policy page
    opened by hkamran80 1
  • Plus button background doesn't change with Dark Mode toggle

    Plus button background doesn't change with Dark Mode toggle

    If Dark Mode is toggled while in the app, the plus button does not change with it.

    Load into dark mode

    image

    Switch to light mode

    image

    Close app and reopen in light mode

    image

    opened by thejayhaykid 1
  • Display Gif size when export finishes

    Display Gif size when export finishes

    PR based on issue: https://github.com/aheze/ProgressGif/issues/5 Cast self to weak self to avoid closure retain cycle. Add gif filesize to Export! button

    opened by janakmshah 1
  • SF Symbols and Fail-safe Support for Media Icons

    SF Symbols and Fail-safe Support for Media Icons

    This PR adds SF Symbols support for the media icons (GitHub, Medium, Twitter, etc) and fail-safes by means of Xcode's Image Sets. This also adds me (@hkamran80) as a contributor in the app.

    opened by hkamran80 1
  • Gitignore + Another Update to the README

    Gitignore + Another Update to the README

    Changes in this pull request:

    • Added a .gitignore file
    • Updated the README
      • Moved the GIF references to the bottom
      • Added local development instructions
      • Moved line 57 outside of the code block
      • Fixed contributors screenshot positioning
      • Added line separators between sections
      • Added re-fork message
    opened by hkamran80 1
  • Drop shadows appear as a solid line

    Drop shadows appear as a solid line

    Because gifs support only 1 alpha channel (a pixel is either transparent or not), shadows appear as a solid line. Possible solution: Allow picking an opaque background

    enhancement help wanted 
    opened by aheze 1
Releases(v1.0.4)
  • v1.0.4(Oct 22, 2020)

    Nothing new. Just had to recompile in order to change the order of the screenshots (see release v1.0.3).

    App store "What's New" description: Minor updates! • Updated screenshots

    Source code(tar.gz)
    Source code(zip)
  • v1.0.3(Oct 18, 2020)

    UPDATE 10/22/2020: ProgressGif has been accepted again! The screenshots are in the wrong order, though...

    How it's supposed to be: Shot 2020-10-22 at 9 44 41 AM | --- |

    How it actually shows up: Shot 2020-10-22 at 9 45 33 AM | Shot 2020-10-22 at 9 45 36 AM | --- | --- |

    Sigh... to change the screenshots, you have to update the app version in Xcode. That's another 10 minutes of compile time, because of Realm! It's fine though, I'll recompile and resubmit the screenshots, again.


    UPDATE 10/20/2020: ProgressGif was metadata rejected!

    Guideline 2.3.3 - Performance - Accurate Metadata We noticed that your screenshots do not sufficiently reflect your app in use.

    Guideline 2.3.7 - Performance - Accurate Metadata Your app screenshots to be displayed on the App Store include references to the price of your app or the service it provides, which is not considered a part of these metadata items.

    I'll revise the screenshots and submit again today.


    Releasing a lot of improvements that were made during Hacktoberfest!

    What's new:

    • Better dark mode appearance
    • Gif size will be displayed when rendering finishes
    • You'll get a haptic click too!

    Bug fixes:

    • Fixed broken links
    • Fixed dark mode glitch in the add button
    Source code(tar.gz)
    Source code(zip)
  • v1.0.2(Aug 26, 2020)

    UPDATE: Replaced Photos icon with SF Symbols as to not violate "Guideline 5.2.5 - Legal - Intellectual Property"

    Lowered minimum deployment target to iOS 11.1. Minor updates:

    • Rendering progress bar color matches editing configuration
    • Add license for SegmentProgressIndicator

    App store "What's New" description: ProgressGif is now available for more devices!

    • Now compatible with iOS 11 and above (used to be iOS 13)
    • Other minor updates (UI and UX)
    Source code(tar.gz)
    Source code(zip)
  • v1.0.1(Aug 25, 2020)

    Updated the storyboard to take the Safe Area into consideration (see this article for more details). Fixed a potential issue where importing from Files wouldn't work -- see here.

    App store "What's New" description:

    General improvements in progress!

    • Optimized interface for all devices
    • Updated importing from Files process
    Source code(tar.gz)
    Source code(zip)
  • v1.0(Aug 25, 2020)

Owner
Zheng
I like coding with Swift and watching anime. WWDC21 Scholar.
Zheng
Progress.swift ⌛ Add beautiful progress bars to your loops.

Progress.swift ⌛ Just wrap the SequenceType in your loop with the Progress SequenceType and you'll automatically get beautiful progress bars. Updating

Justus Kandzi 304 Dec 1, 2022
A simple and easily customizable InputAccessoryView for making powerful input bars with autocomplete and attachments

InputBarAccessoryView Features Autocomplete text with @mention, #hashtag or any other prefix A self-sizing UITextView with an optional fixed height (c

Nathan Tannar 968 Jan 2, 2023
™️ A powerful paging view controller with interactive indicator bars

⭐️ Features Easy to implement page view controller with interactive indicator bars. Highly adaptable and powerful customization. Fully extensible with

UI At Six 2.5k Jan 2, 2023
A simple and easily customizable InputAccessoryView for making powerful input bars with autocomplete and attachments

InputBarAccessoryView Features Autocomplete text with @mention, #hashtag or any other prefix A self-sizing UITextView with an optional fixed height (c

Nathan Tannar 968 Jan 2, 2023
A framework for presenting bars and view controllers as popup, much like the look and feel of Apple Music App.

PBPopupController PBPopupController is a framework for presenting bars and view controllers as popup, much like the look and feel of Apple Music App.

Patrick 58 Dec 3, 2022
An iOS Framework Capture & record ARKit videos 📹, photos 🌄, Live Photos 🎇, and GIFs 🎆.

An iOS Framework that enables developers to capture videos ?? , photos ?? , Live Photos ?? , and GIFs ?? with ARKit content.

Ahmed Bekhit 1.5k Dec 24, 2022
Kanvas is an open-source iOS library for adding effects, drawings, text, stickers, and making GIFs from existing media or the camera.

Kanvas Kanvas is an open-source iOS library for adding effects, drawings, text, stickers, and making GIFs from existing media or the camera.

Tumblr 267 Nov 24, 2022
Drop in GIF Collection View. Uses Tenor as default GIFs provider.

Drop in GIF Collection View. Uses Tenor as default GIFs provider. This will allow you to easily integrate GIF image search into your app or you can use this as a GIF keyboard for your messaging needs.

null 5 May 7, 2022
Convert live photos and videos into animated GIFs in iOS, or extract frames from them.

Create a GIF from the provided video file url, Or extract images from videos. This repository has been separated from original repo along with some no

gitmerge 83 May 18, 2022
ABMediaView can display images, videos, as well as now GIFs and Audio!

Media view which subclasses UIImageView, and can display & load images, videos, GIFs, and audio and from the web, and has functionality to minimize from fullscreen, as well as show GIF previews for videos.

Andrew Boryk 80 Dec 20, 2022
Media view which subclasses UIImageView, and can display & load images, videos, GIFs, and audio and from the web, and has functionality to minimize from fullscreen, as well as show GIF previews for videos.

I've built out the Swift version of this library! Screenshots Description ABMediaView can display images, videos, as well as now GIFs and Audio! It su

Andrew Boryk 80 Dec 20, 2022
PBCircularProgressView is a circular progress view for iOS similar to the app store download progress view.

Overview PBCircularProgressView is a circular progress view for iOS similar to the app store download progress view. It also ha

null 0 Oct 27, 2021
Shawn Frank 2 Aug 31, 2022
UIView based progress bar that shows a progress based on duration in seconds

DurationProgressBar Create a progress bar based on a duration in seconds. The view is fully customisable. Install Add this repository to your swift pa

Cem Olcay 2 May 21, 2022
Snake Progress shows circular progress for iOS Apps.

SnakeProgress SnakeProgress shows circular progress for iOS Apps. With SnakeProgress With SnakeProgress, you can easily circular progress. @IBOutlet w

null 8 Sep 22, 2022
Easily add vertical and horizontal pull to refresh to any UIScrollView. Can also add multiple pull-to-refesh views at once.

This is a fork from the famous SVPullToRefresh pod with 2 additional functionalities: Can add multiple pull-to-refresh views into one single UIScrollV

Hoang Tran 42 Dec 28, 2022
Tutorials from sparrowcode.io website. You can add new, translate or fix typos. Also you can add your apps from App Store for free.

Tutorials from sparrowcode.io website. You can add new, translate or fix typos. Also you can add your apps from App Store for free.

Sparrow Code 31 Jan 3, 2023
Add to-do List - a mobile application where you can add your to-dos and follow them

This project, is a mobile application where you can add your to-dos and follow them. You can add your to-do's.

Cem 4 Apr 1, 2022
Tutorials from sparrowcode.io website. You can add new, translate or fix typos. Also you can add your apps from App Store for free.

Страницы доступны на sparrowcode.io/en & sparrowcode.io/ru Как добавить свое приложение Добавьте элемент в json /ru/apps/apps.json. Если ваше приложен

Sparrow Code 30 Nov 25, 2022
RSA public/private key encryption, private key signing and public key verification in Swift using the Swift Package Manager. Works on iOS, macOS, and Linux (work in progress).

BlueRSA Swift cross-platform RSA wrapper library for RSA encryption and signing. Works on supported Apple platforms (using Security framework). Linux

Kitura 122 Dec 16, 2022