Advertisement
Guest User

Untitled

a guest
Jun 27th, 2016
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.93 KB | None | 0 0
  1. // IBEnum.swift
  2.  
  3.  
  4. import Foundation
  5.  
  6.  
  7. public protocol IBEnum {
  8. init?(string:String)
  9. }
  10.  
  11. public extension IBEnum {
  12.  
  13.  
  14. /// Helper function that returns a tuple containing the name and params
  15. ///
  16. ///
  17. /// - Discussion
  18. /// Since "name(param1,param2,param3)" is the classic IBAnimatable format
  19. ///
  20. /// this method will return "wave"
  21. static func extractNameAndParams(_ string:String) -> (name:String, params:[String]) {
  22. let tokens = string.components(separatedBy: CharacterSet(charactersIn: "()")).filter({!$0.isEmpty}) // extract params list self.enumName
  23. let maskName = tokens.first ?? "";
  24. let paramsString = tokens.count >= 2 ? tokens[1] : "";
  25. let params = paramsString.components(separatedBy: ","); // params list
  26. return (name:maskName, params:params);
  27. }
  28.  
  29. }
  30.  
  31.  
  32. import Foundation
  33. import UIKit
  34.  
  35. public enum MaskType: IBEnum {
  36. case circle
  37. case polygon(sides:Int?)
  38. case star(points:Int?)
  39. case triangle
  40. case wave(direction:WaveDirection?, width:Float?, offset:Float?)
  41. case parallelogram(angle:Double?)
  42. case none
  43.  
  44. public enum WaveDirection:String {
  45. case up
  46. case down
  47. }
  48. }
  49.  
  50. // ---------------------------- MASKType ---------------------------------------------------
  51.  
  52. public extension MaskType {
  53. init(string:String) {
  54. let paramsAndName = MaskType.extractNameAndParams(string)
  55. let name = paramsAndName.name;
  56. let params = paramsAndName.params;
  57.  
  58. switch name.lowercased() {
  59. case "circle":
  60. self = MaskType.circle
  61. case "polygon":
  62. self = MaskType.polygon(sides: nil)
  63. case "star":
  64. self = MaskType.star(points: Int(params[0]))
  65. case "triangle":
  66. self = MaskType.triangle;
  67. case "wave":
  68. self = MaskType.wave(direction: WaveDirection(rawValue:params[0].lowercased()), width: Float(params[1]), offset:Float(params[2]))
  69. case "parallelogram":
  70. self = MaskType.parallelogram(angle: Double(params[0]))
  71. default:
  72. self = MaskType.none
  73. }
  74. }
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement