Как да добавите мигащ кръг в метода 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