Jak zrobić migający flash z sygnałem SOS ?

0

Chciałem zrobić migającą diode led jako SOS. Ma ktoś pomysł jak to zrobić ? Na poniższym kodzie zrobiłem na próbę tylko tak że dioda miga tylko. I nie wiem czy zrobić to jako przełączniki NSTimer czy wątek. Bo chcę po wcisnieciu guzika zeby sygnal SOS sie wlaczal i wylaczal natychmiast. Napisane w SWIFT2

class Sos {
    var timer1 = NSTimer()
    var timer2 = NSTimer()
    var volume: Float = 0.1
    let flashLight = FlashLight()

    func start() {

        self.timer1 = NSTimer.scheduledTimerWithTimeInterval(0.2,
            target: self,
            selector: Selector("switchON"),
            userInfo: nil,
            repeats: true)

        self.timer2 = NSTimer.scheduledTimerWithTimeInterval(0.4,
            target: self,
            selector: Selector("switchOFF"),
            userInfo: nil,
            repeats: true)
    }

    func stop() {
        timer1.invalidate()
        timer2.invalidate()
        flashLight.switchOFF()
    }


    @objc func switchON() {
        flashLight.switchON(self.volume)
    }

    @objc func switchOFF() {
        flashLight.switchOFF()
    }

    deinit {
        self.timer1.invalidate()
        self.timer2.invalidate()
    }

}
0

No przecież masz tutaj race condition, weźże zrób to jak człowiek, czyli stwórz flashLight.toggle() działające na zasadzie:

if self.isOn()
  self.switchOff()
else
  self.switchOn()

I wtedy masz tylko jeden timer, a nie jakieś nakładające się na siebie.

1

To jest totalnie źle zrobione.
Najprościej zrób tablicę BOOL, każda komórka oznacza stan włączony lub wyłączony. Wypełnij tablicę odpowiednim kodem Morsea , a timer powinien iterować po tej tablicy i aktualizować UI albo diodę (cokolwiek tam używasz).
Kreska niech zajmuje 4 komórki kropka jedną, tak samo odstęp między literami 4 komórki odstęp między pozostałymi sygnałami jedną komórkę.

Gadanie o wątkach w tym kontekście to totalna przesada!

Jeśli miałoby to być zupełnie dobrze zrobione, to twoja klasa powinna mieć delegata informującego czy o zmianach on/off i udostępniające informacje o bieżącym stanie. Można skorzystać z mechanizmu KVO.
Sama klasa nie powinna operować na żadnym konkretnym elemencie UI. Powiązaniem tej klasy z elementem UI (lub diodą w telefonie) powinien się zająć ViewController.
Nie używam Swifta więc nie napiszę ci tego w szczegółach.

0

Juz napisalem, zrobilem tablice SOS (krotki sygnal , krotki sygna, krotki sygan, przerwa, dlugi sygnal , dlugi sygnal it'd. kazda litera ma swoj kod. potem z tablicy wrzucam do sekwensera i on mi pobiera dane i timer pobiera dane krotki syganl 0.4 sek dlugi 0.8 i co tyle uruchamia funkcje ktora patrzy czy dioda wlaczona to wylaczy, czy odwrotnie

1 użytkowników online, w tym zalogowanych: 0, gości: 1