Как добавить мигающий круг внутри метода draw:inRect: UIView?

Внутри моего собственного инициализатора UIView и draw:inRect у меня есть следующий код:

override func draw(_ rect: CGRect) {
    super.draw(rect)

    //...

    let axisPath = UIBezierPath()

    axisPath.move(to: CGPoint(x: paddingHorizontal + 20, y: paddingVertical))
    axisPath.addLine(to: CGPoint(x: leftOffset, y: bottomOffset))
    axisPath.addLine(to: CGPoint(x: rect.width - paddingHorizontal, y: bottomOffset))
    axisPath.lineWidth = 1

    UIColor.black.set()
    axisPath.stroke()

    var currentIndex = 0

    for yearData in data {

      //...

        let circle = UIBezierPath(roundedRect: CGRect(x: x - 4, y: y - 4, width: 8, height: 8), cornerRadius: 4)
        circle.fill()
        circle.stroke() //red circle, I need to make it blinking somehow
        //...
    }

    //...
}

Результат следующий:

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

Теперь мне нужно, чтобы красный круг мигал :) Как мне это сделать?


person Bartłomiej Semańczyk    schedule 27.04.2017    source источник
comment
Я бы порекомендовал отдельный CAShapeLayer для рисования круга и анимации с помощью Core Animation.   -  person dmorrow    schedule 27.04.2017
comment
Я сделал, как вы сказали, и это сработало. Спасибо.   -  person Bartłomiej Semańczyk    schedule 27.04.2017


Ответы (2)


Я бы выбрал другой подход. Используйте draw(_:) только для статической части графика.

Мигающий красный кружок должен быть простым небольшим подпредставлением, добавленным поверх графического представления. Используйте повторяющуюся анимацию UIView, чтобы постепенно увеличивать и уменьшать вид маленького круга, используя его свойство alpha.

См. Как заставить работать эту анимацию затухания? для примера выполнения мигающей анимации.

person rmaddy    schedule 27.04.2017

Настройте NSTimer и на его основе нарисуйте и отмените красный круг. У вас есть по крайней мере два варианта: создать красный круг как UIView и просто установить соответствующий флаг Hidden или переключить флаг на таймере и сделать недействительной область, заключенную в красный круг.

person tmrog    schedule 27.04.2017