ios - How to show a static NON-animated progress bar using CoreGraphics in Swift? -


i want make static progress bar no animation @ all. want orange part filled this , image shows progress of (1 of 3), know how accomplish view (2 of 3) , completed progress bar in (3 of 3).

thank , appreciated.

here have workin, designable class

import foundation import uikit  @ibdesignable class staticload: uiview {      enum progress {         case empty         case filled(num: int)         case full     }      @ibinspectable public var progresscolor: uicolor?  {         didset {             updatecolor(progresscolor: progresscolor ?? tintcolor, nonprogresscolor: nonprogresscolor)         }     }      @ibinspectable public var nonprogresscolor: uicolor = .gray {         didset {             updatecolor(progresscolor: progresscolor ?? tintcolor, nonprogresscolor: nonprogresscolor)         }     }      @ibinspectable public var numberofsteps: int = 3 {         didset {             redrawsteps(step: numberofsteps)             updatecolor(progresscolor: progresscolor ?? self.tintcolor, nonprogresscolor: nonprogresscolor)         }     }      @ibinspectable public var filledprogess: int = 1 {         didset {             if filledprogess >= numberofsteps {                 filledprogess = numberofsteps                 progress = .full             }             if filledprogess <= 0 {                 filledprogess = 0                 progress = .empty             } else {                 progress = .filled(num: filledprogess)             }             updatecolor(progresscolor: progresscolor ?? tintcolor, nonprogresscolor: nonprogresscolor)         }     }      private var tip: cgfloat = 5     private var progress: progress = .empty     private var progresslayers: [cashapelayer] = []      private func updatecolor(progresscolor: uicolor, nonprogresscolor: uicolor) {         switch progress {         case .empty:             progresslayers.foreach { $0.fillcolor = nonprogresscolor.cgcolor }         case let .filled(num):             progresslayers.dropfirst(num).foreach { $0.fillcolor = nonprogresscolor.cgcolor }             progresslayers.droplast(progresslayers.count - num).foreach { $0.fillcolor = progresscolor.cgcolor }         case .full :             progresslayers.foreach { $0.fillcolor = progresscolor.cgcolor }         }     }      private func redrawsteps(step: int) {         progresslayers.foreach { $0.removefromsuperlayer() }         progresslayers.removeall()         if step == 0 {             let layer = cashapelayer()             layer.frame = self.bounds             progresslayers.append(layer)         } else {             var topleft = cgpoint(x: 0, y: 0)             let cgstep = cgfloat(step)             let avaiblewidth = self.bounds.width - (2 * (cgstep - 1))             let spaceperstep = avaiblewidth / cgstep             let height = bounds.height             let halfheight = height / 2             in 0..<step {                  let layer = cashapelayer()                 let bezier = uibezierpath()                 bezier.move(to: topleft)                 bezier.addline(to: cgpoint(x: topleft.x + spaceperstep, y: topleft.y))                 if + 1 != step {                     bezier.addline(to: cgpoint(x: topleft.x + spaceperstep + tip, y: topleft.y + halfheight))                 }                 bezier.addline(to: cgpoint(x: topleft.x + spaceperstep, y: topleft.y + height))                 bezier.addline(to: cgpoint(x: topleft.x, y: topleft.y + height))                 if != 0 {                     bezier.addline(to: cgpoint(x: topleft.x + tip, y: topleft.y + halfheight))                 }                 bezier.close()                 layer.path = bezier.cgpath                 progresslayers.append(layer)                 self.layer.addsublayer(layer)                  topleft.x = topleft.x + spaceperstep + 2             }         }     }      override func layoutsubviews() {         redrawsteps(step: numberofsteps)         updatecolor(progresscolor: progresscolor ?? tintcolor, nonprogresscolor: nonprogresscolor)     }  } 

all have take uiview storyboard , make custom class staticload. can specify number of bars in progress bar changing numberofsteps property either code or storyboard, , fill of bar filledprogress

if want bigger arrow, change tip property, or specify path bezierpath.

if don't know, @ibdesignable (it recommended if class designable should put in framework rather same project due continuous compilation) allows storyboard render view , @ibinspectable allow set variable through storyboard.

this working not-optimized example.


Comments

Popular posts from this blog

neo4j - finding mutual friends in a cypher statement starting with three or more persons -

php - How to remove letter in front of the word laravel -

minify - Minimizing css files -