как сделать динамический strokeColor в CAShapeLayer? В Swift

Я использую шесть параметров (активных, неактивных, проводных, сжатых, свободных и тотальных). Я делаю класс CAShapeLayer и я сделал одну функцию там, с помощью которой я могу рисовать круг, просто добавляя параметры. Я делаю CGPath и добавляю его шесть раз в функцию, которые рисуют круг. Я получаю 5 слоев в UIView . Я делаю таймер, который обновляет данные за одну секунду, но добавляет еще 5 слоев в UIView . Это неправильно. Я хочу анимацию дуг с данными и обновление за одну секунду. когда слои становятся слишком большим, устройство работает медленно. Как я могу это сделать?

Я написал здесь свой пример.

 public class Arc { public init() { } public func addFigure(path: CGPath, fillColor: UIColor, strokeColor: UIColor, strokeStart: CGFloat, strokeEnd: CGFloat, lineWidth: CGFloat, miterLimit: CGFloat, lineDashPhase: CGFloat, layer: CALayer) -> CAShapeLayer { let shape = CAShapeLayer() shape.path = path shape.fillColor = fillColor.CGColor shape.strokeColor = strokeColor.CGColor shape.strokeStart = strokeStart shape.strokeEnd = strokeEnd shape.lineWidth = lineWidth shape.miterLimit = miterLimit shape.lineDashPhase = lineDashPhase return shape } } 

UIView, который рисует круг

  import UIKit import DrawKit class MemoryMainView: UIView { required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) } override init(frame: CGRect) { super.init(frame: frame) } // MARK: - var and let let arc = Arc() let notificationCenter = NSNotificationCenter.defaultCenter() var boolForMemoryArc = false // for ARC var memoryArcRadius: CGFloat! var lineWidht: CGFloat! var path: UIBezierPath! var checkDevice = false // MARK: - colors @IBInspectable var blackColor: UIColor = .blackColor() @IBInspectable var redColor: UIColor = .redColor() @IBInspectable var cyanColor: UIColor = .cyanColor() @IBInspectable var blueColor: UIColor = .blueColor() @IBInspectable var grapeColor: UIColor! @IBInspectable var greenColor: UIColor = .greenColor() override func drawRect(rect: CGRect) { if boolForMemoryArc == false { drawMemoryArc() boolForMemoryArc = true } notificationCenter.addObserver(self, selector: "turnOnMemoryTimer", name: "turnOnMemoryArc", object: nil) } func drawMemoryArc() { if checkDevice == false { let device = CheckDevice().returnResult() memoryArcRadius = device.radiusArc lineWidht = device.lineWidth path = UIBezierPath(arcCenter: CGPoint(x: frame.size.width/2, y: frame.size.height/2), radius: memoryArcRadius, startAngle: CGFloat(-M_PI_2), endAngle: CGFloat(M_PI*2 - M_PI_2), clockwise: true) checkDevice = true } let memory = showMemory() // active cyanColor arc.addFigure(path.CGPath, fillColor: blackColor, strokeColor: cyanColor, strokeStart: 0.0, strokeEnd: CGFloat(percentageMemory(memory.active)), lineWidth: lineWidht, miterLimit: 0.0, lineDashPhase: 0.0, layer: self.layer) // inactive blue arc.addFigure(path.CGPath, fillColor: .clearColor(), strokeColor: blueColor, strokeStart: CGFloat(percentageMemory(memory.active)), strokeEnd: CGFloat(percentageMemory(memory.active + memory.inactive)), lineWidth: lineWidht, miterLimit: 0.0, lineDashPhase: 0.0, layer: self.layer) // wired redColor arc.addFigure(path.CGPath, fillColor: .clearColor(), strokeColor: redColor, strokeStart: CGFloat(percentageMemory(memory.active + memory.inactive)), strokeEnd: CGFloat(percentageMemory(memory.active + memory.inactive + memory.wired)), lineWidth: lineWidht, miterLimit: 0.0, lineDashPhase: 0.0, layer: self.layer) // compressed yellow arc.addFigure(path.CGPath, fillColor: .clearColor(), strokeColor: grapeColor, strokeStart: CGFloat(percentageMemory(memory.active + memory.inactive + memory.wired)), strokeEnd: CGFloat(percentageMemory(memory.active + memory.inactive + memory.wired + memory.compressed)), lineWidth: lineWidht, miterLimit: 0.0, lineDashPhase: 0.0, layer: self.layer) // free green arc.addFigure(path.CGPath, fillColor: .clearColor(), strokeColor: greenColor, strokeStart: CGFloat(percentageMemory(memory.active + memory.inactive + memory.wired + memory.compressed)), strokeEnd: 1.0, lineWidth: lineWidht, miterLimit: 0.0, lineDashPhase: 0.0, layer: self.layer) print("memory layers \(self.layer.sublayers?.count)") } func turnOnMemoryTimer() { GlobalTimer.sharedInstance.viewTimer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: "drawMemoryArc", userInfo: nil, repeats: true) } 

}

введите описание изображения здесь

One Solution collect form web for “как сделать динамический strokeColor в CAShapeLayer? В Swift”

Я изменил код, и он работает для меня.

 func drawMemoryArc() { if checkDevice == false { let device = CheckDevice().returnResult() memoryArcRadius = device.radiusArc lineWidht = device.lineWidth path = UIBezierPath(arcCenter: CGPoint(x: frame.size.width/2, y: frame.size.height/2), radius: memoryArcRadius, startAngle: CGFloat(-M_PI_2), endAngle: CGFloat(M_PI*2 - M_PI_2), clockwise: true) checkDevice = true } let memory = showMemory() layer.sublayers?.removeAll() // active cyanColor arc.addFigure(path.CGPath, fillColor: blackColor, strokeColor: cyanColor, strokeStart: 0.0, strokeEnd: CGFloat(percentageMemory(memory.active)), lineWidth: lineWidht, miterLimit: 0.0, lineDashPhase: 0.0, layer: self.layer) // inactive blue arc.addFigure(path.CGPath, fillColor: .clearColor(), strokeColor: blueColor, strokeStart: CGFloat(percentageMemory(memory.active)), strokeEnd: CGFloat(percentageMemory(memory.active + memory.inactive)), lineWidth: lineWidht, miterLimit: 0.0, lineDashPhase: 0.0, layer: self.layer) // wired redColor arc.addFigure(path.CGPath, fillColor: .clearColor(), strokeColor: redColor, strokeStart: CGFloat(percentageMemory(memory.active + memory.inactive)), strokeEnd: CGFloat(percentageMemory(memory.active + memory.inactive + memory.wired)), lineWidth: lineWidht, miterLimit: 0.0, lineDashPhase: 0.0, layer: self.layer) // compressed yellow arc.addFigure(path.CGPath, fillColor: .clearColor(), strokeColor: grapeColor, strokeStart: CGFloat(percentageMemory(memory.active + memory.inactive + memory.wired)), strokeEnd: CGFloat(percentageMemory(memory.active + memory.inactive + memory.wired + memory.compressed)), lineWidth: lineWidht, miterLimit: 0.0, lineDashPhase: 0.0, layer: self.layer) // free green arc.addFigure(path.CGPath, fillColor: .clearColor(), strokeColor: greenColor, strokeStart: CGFloat(percentageMemory(memory.active + memory.inactive + memory.wired + memory.compressed)), strokeEnd: 1.0, lineWidth: lineWidht, miterLimit: 0.0, lineDashPhase: 0.0, layer: self.layer) print("memory layers \(self.layer.sublayers?.count)") } 
  • Как сделать автоматический просмотр UIView в полноэкранном режиме при переключении ориентации
  • Как создать отдельный UIView вне любого ViewController в раскадровке?
  • Как получить активный вид в приложении iOS из делегата приложения?
  • Как вручную установить, какой вид раскадровки показать в приложении делегат
  • Внедрение автоматического макета для представлений, сгенерированных программным способом
  • Xcode & Swift - обнаружение пользовательского касания UIView внутри UIScrollView
  • iOS - UIScrollView не обновляет свой контент, а некоторые UIView исчезают после перезагрузки
  • Невозможно вызвать метод из расширения UIView
  • Размещение и перемещение просмотров по вращению (UIView)
  • Повернуть (угол) UIView, используя атрибуты времени выполнения, определенные пользователем
  • Родительский UIView не изменяет размер после ограничения. Константа на UILabel изменена
  • Interesting Posts

    Два UITapGestureRecognizer включены в UIView

    Как вы можете создать пользовательский объект в палитре объектов Interface Builder?

    Есть ли реализация расстояния Левенштейна или аналогичного для iphone?

    TableView (таблица результатов поиска) неожиданно свидает

    Разработка IOS Xamarin Visual Studio без Mac?

    UIActivityViewController внутри контейнера

    cellForItemAtIndexPath возвращает нуль после прокрутки силы, чтобы сделать ее видимой

    Измените конкретный код UIWebView, чтобы иметь адресную строку, похожую на Safari

    iPhone: странный пустой белый экран при запуске после переноса моего приложения на IOS 5

    Не удается перетащить UIImageView до конца UIScrollview?

    Обнаружение столкновений неравномерных форм в iOS

    + : непризнанный селектор, отправленный в класс

    Я получаю сообщение об ошибке «Ни один из входных каталогов не содержал соответствующий образ запуска» в xCode5-iOS7

    NSFetchedResultsController не показывает все результаты после слияния `NSManagedObjectContextDidSaveNotification`

    Изменение высоты UIView с отключением автовыключения

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.