Skip to content

Instantly share code, notes, and snippets.

@50percentgrey
Last active September 20, 2017 18:53
Show Gist options
  • Save 50percentgrey/1d6fdaf12271bf89db3bbb9f45f01b6d to your computer and use it in GitHub Desktop.
Save 50percentgrey/1d6fdaf12271bf89db3bbb9f45f01b6d to your computer and use it in GitHub Desktop.
Swift Sprite Animation
//
// SpriteAnimation.swift
//
// Created by Antonio Junior on 5/10/16.
// Copyright © 2016 Antonio Junior. All rights reserved.
//
import UIKit
/**
SpritAnimation simplifies the use of images sequences with UIImageView
*/
public class SpriteAnimation: UIImageView {
internal var loop = false
internal var duration: TimeInterval = 1
fileprivate var images = [UIImage]()
/**
You should pass the base image name with a replacement selector to load all sequences correctly
e.g: to assets named as "myImage1", "myImage2" ... "myImage20" you should use the constructor like that:
(CGRect, imageNamed: "myImage%", relaceSelector: "%", range: 0...20)
*/
public init(frame: CGRect, imageNamed: String, replaceSelector: String, range: CountableClosedRange<Int>, numberOfDigits: Int = 1) {
assert(numberOfDigits > 0, "Number of digits should be higher than zero")
super.init(frame: frame)
let images = SpriteAnimation.imageRange(imageNamed, replaceSelector: replaceSelector, range: range, numberOfDigits: numberOfDigits)
contentMode = .scaleAspectFill
animationImages = images
animationDuration = duration
}
public static func imageRange(_ imageNamed: String, replaceSelector: String, range: CountableClosedRange<Int>, numberOfDigits: Int = 1) -> [UIImage] {
let formatter = NumberFormatter()
formatter.minimumIntegerDigits = numberOfDigits
var images = [UIImage]()
// create images
for i in range {
let number = formatter.string(from: NSNumber(integerLiteral: i)) ?? String(i)
let name = imageNamed.replacingOccurrences(of: replaceSelector, with: number)
if let image = UIImage(named: name) {
images.append(image)
}
}
return images
}
required public init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment