Guest User

Untitled

a guest
Sep 25th, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.43 KB | None | 0 0
  1. import UIKit
  2.  
  3. class GradientView: UIView {
  4.  
  5. let gradientLayer = CAGradientLayer()
  6.  
  7. override func awakeFromNib() {
  8. // 1
  9. self.backgroundColor = ColorPalette.White
  10.  
  11. // 2
  12. gradientLayer.frame = self.bounds
  13.  
  14. // 3
  15. let color1 = ColorPalette.GrdTop.CGColor as CGColorRef
  16. let color2 = ColorPalette.GrdBottom.CGColor as CGColorRef
  17. gradientLayer.colors = [color1, color2]
  18.  
  19. // 4
  20. gradientLayer.locations = [0.0, 1.0]
  21.  
  22. // 5
  23. self.layer.addSublayer(gradientLayer)
  24. }
  25.  
  26. }
  27.  
  28. gradientLayer.locations = [0.0, 1.0]
  29.  
  30. locations = [0.45, 0.55]
  31.  
  32. @IBDesignable
  33. class GradientView: UIView {
  34.  
  35. private let gradientLayer = CAGradientLayer()
  36.  
  37. @IBInspectable var color1: UIColor = .white { didSet { updateColors() } }
  38. @IBInspectable var color2: UIColor = .blue { didSet { updateColors() } }
  39.  
  40. override init(frame: CGRect) {
  41. super.init(frame: frame)
  42. configureGradient()
  43. }
  44.  
  45. required init?(coder aDecoder: NSCoder) {
  46. super.init(coder: aDecoder)
  47. configureGradient()
  48. }
  49.  
  50. override func layoutSubviews() {
  51. super.layoutSubviews()
  52.  
  53. gradientLayer.frame = bounds
  54. }
  55.  
  56. private func configureGradient() {
  57. gradientLayer.startPoint = CGPoint(x: 0, y: 0)
  58. gradientLayer.endPoint = CGPoint(x: 1, y: 1)
  59. updateColors()
  60. layer.insertSublayer(gradientLayer, at: 0)
  61. }
  62.  
  63. private func updateColors() {
  64. gradientLayer.colors = [color1.cgColor, color2.cgColor]
  65. }
  66.  
  67. }
  68.  
  69. @IBDesignable
  70. class GradientView: UIView {
  71.  
  72. private let gradientLayer = CAGradientLayer()
  73.  
  74. @IBInspectable var color1: UIColor = .whiteColor() { didSet { updateColors() } }
  75. @IBInspectable var color2: UIColor = .blueColor() { didSet { updateColors() } }
  76.  
  77. override init(frame: CGRect) {
  78. super.init(frame: frame)
  79. configureGradient()
  80. }
  81.  
  82. required init?(coder aDecoder: NSCoder) {
  83. super.init(coder: aDecoder)
  84. configureGradient()
  85. }
  86.  
  87. override func layoutSubviews() {
  88. super.layoutSubviews()
  89.  
  90. gradientLayer.frame = bounds
  91. }
  92.  
  93. private func configureGradient() {
  94. gradientLayer.startPoint = CGPoint(x: 0, y: 0)
  95. gradientLayer.endPoint = CGPoint(x: 1, y: 1)
  96. updateColors()
  97. layer.insertSublayer(gradientLayer, atIndex: 0)
  98. }
  99.  
  100. private func updateColors() {
  101. gradientLayer.colors = [color1.CGColor, color2.CGColor]
  102. }
  103. }
  104.  
  105. import UIKit
  106.  
  107. class GradientView: UIView {
  108.  
  109. let gradientLayer = CAGradientLayer()
  110.  
  111. override func awakeFromNib() {
  112. // 1
  113. self.backgroundColor = ColorPalette.White
  114.  
  115. // 2
  116. gradientLayer.frame = self.bounds
  117.  
  118. // 3
  119. let color1 = ColorPalette.GrdTop.CGColor as CGColorRef
  120. let color2 = ColorPalette.GrdBottom.CGColor as CGColorRef
  121. gradientLayer.colors = [color1, color2]
  122.  
  123. //** This code should do the trick... **//
  124. gradientLayer.startPoint = CGPointMake(0.0, 0.5)
  125.  
  126. // 4
  127. gradientLayer.locations = [0.0, 1.0]
  128.  
  129. // 5
  130. self.layer.addSublayer(gradientLayer)
  131. }
  132. }
  133.  
  134. import UIKit
  135.  
  136. @IBDesignable class GradientView: UIView {
  137. var gradient:CAGradientLayer
  138. @IBInspectable var startColor:UIColor = UIColor.whiteColor() {
  139. didSet {
  140. self.updateGradient()
  141. }
  142. }
  143.  
  144. @IBInspectable var color1:UIColor? = nil {
  145. didSet {
  146. self.updateGradient()
  147. }
  148. }
  149.  
  150. @IBInspectable var stop1:Double = (1.0 / 3.0) {
  151. didSet {
  152. self.updateGradient()
  153. }
  154. }
  155.  
  156. @IBInspectable var color2:UIColor? = nil {
  157. didSet {
  158. self.updateGradient()
  159. }
  160. }
  161.  
  162. @IBInspectable var stop2:Double = (2.0 / 3.0) {
  163. didSet {
  164. self.updateGradient()
  165. }
  166. }
  167.  
  168. @IBInspectable var endColor:UIColor = UIColor.blackColor() {
  169. didSet {
  170. self.updateGradient()
  171. }
  172. }
  173.  
  174. @IBInspectable var isHorizontal:Bool {
  175. get {
  176. return self.gradient.endPoint.y == self.gradient.startPoint.y
  177. }
  178. set {
  179. self.gradient.endPoint = newValue ? CGPoint(x: 1, y: 0) : CGPoint(x: 0, y: 1)
  180. }
  181. }
  182.  
  183. override init(frame: CGRect) {
  184. gradient = CAGradientLayer()
  185. super.init(frame: frame)
  186. self.configGradient()
  187. }
  188.  
  189. required init?(coder aDecoder: NSCoder) {
  190. gradient = CAGradientLayer()
  191. super.init(coder: aDecoder)
  192. self.configGradient()
  193. }
  194.  
  195. func configGradient() {
  196. self.backgroundColor = UIColor.clearColor()
  197. self.layer.insertSublayer(self.gradient, atIndex: 0)
  198. self.gradient.masksToBounds = true
  199. self.gradient.frame = self.bounds
  200. self.gradient.startPoint = CGPoint(x: 0, y: 0)
  201. self.gradient.endPoint = CGPoint(x: 1, y: 0)
  202. self.updateGradient()
  203. }
  204.  
  205. override func layoutSubviews() {
  206. super.layoutSubviews()
  207. self.gradient.frame = self.bounds
  208. }
  209.  
  210. func updateGradient() {
  211. var colors:[CGColorRef] = []
  212. var locations:[NSNumber] = []
  213. colors.append(self.startColor.CGColor)
  214. locations.append(0.0.nsNumber)
  215.  
  216. if let color = self.color1 {
  217. colors.append(color.CGColor)
  218. locations.append(self.stop1)}
  219.  
  220. if let color = self.color2 {
  221. colors.append(color.CGColor)
  222. locations.append(self.stop2)
  223. }
  224.  
  225. colors.append(self.endColor.CGColor)
  226. locations.append(1.0.nsNumber)
  227.  
  228. self.gradient.colors = colors
  229. self.gradient.locations = locations
  230.  
  231. self.layer.setNeedsDisplay()
  232. }
  233. }
  234.  
  235. // The end point of the gradient when drawn in the layer’s coordinate space. Animatable.
  236. var endPoint: CGPoint
  237.  
  238. // The start point of the gradient when drawn in the layer’s coordinate space. Animatable.
  239. var startPoint: CGPoint
  240.  
  241. // the gradient angle, in degrees anticlockwise from 0 (east/right)
  242. @IBInspectable var angle: CGFloat = 270
  243.  
  244. // create vector pointing in direction of angle
  245. private func gradientPointsForAngle(_ angle: CGFloat) -> (CGPoint, CGPoint) {
  246. // get vector start and end points
  247. let end = pointForAngle(angle)
  248. let start = oppositePoint(end)
  249. // convert to gradient space
  250. let p0 = transformToGradientSpace(start)
  251. let p1 = transformToGradientSpace(end)
  252. return (p0, p1)
  253. }
  254.  
  255. private func pointForAngle(_ angle: CGFloat) -> CGPoint {
  256. // convert degrees to radians
  257. let radians = angle * .pi / 180.0
  258. var x = cos(radians)
  259. var y = sin(radians)
  260. // (x,y) is in terms unit circle. Extrapolate to unit square to get full vector length
  261. if (fabs(x) > fabs(y)) {
  262. // extrapolate x to unit length
  263. x = x > 0 ? 1 : -1
  264. y = x * tan(radians)
  265. } else {
  266. // extrapolate y to unit length
  267. y = y > 0 ? 1 : -1
  268. x = y / tan(radians)
  269. }
  270. return CGPoint(x: x, y: y)
  271. }
  272.  
  273. private func oppositePoint(_ point: CGPoint) -> CGPoint {
  274. return CGPoint(x: -point.x, y: -point.y)
  275. }
  276.  
  277. private func transformToGradientSpace(_ point: CGPoint) -> CGPoint {
  278. // input point is in signed unit space: (-1,-1) to (1,1)
  279. // convert to gradient space: (0,0) to (1,1), with flipped Y axis
  280. return CGPoint(x: (point.x + 1) * 0.5, y: 1.0 - (point.y + 1) * 0.5)
  281. }
  282.  
  283. private func updateGradient() {
  284. if let gradient = self.gradient {
  285. let (start, end) = gradientPointsForAngle(self.angle)
  286. gradient.startPoint = start
  287. gradient.endPoint = end
  288. gradient.frame = self.bounds
  289. }
  290. }
Add Comment
Please, Sign In to add comment