Last active
September 20, 2017 18:53
-
-
Save 50percentgrey/1d6fdaf12271bf89db3bbb9f45f01b6d to your computer and use it in GitHub Desktop.
Swift Sprite Animation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// 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