Добавление таймеров для обновления цвета фона UIView - PullRequest
0 голосов
/ 25 октября 2018

Привет, мои коллеги-программисты, я новичок здесь и мне нужна помощь в обновлении фона UIView с помощью таймеров.Можно ли установить таймеры в пределах определенного часового диапазона?Я хочу иметь возможность, где фон будет менять цвета в зависимости от времени суток.Кроме того, я мог бы иметь это, где это будет обновлять, даже если пользователь не использует приложение?Я хочу, чтобы у моего приложения был действительно хороший пользовательский интерфейс и удобство работы без необходимости оставаться в приложении.Я исследовал таймеры, однако они используют секунды, поэтому мне интересно, могу ли я вместо этого использовать часы.Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Рабочий код для Swift 4.

Для этой простой вещи не нужно использовать таймер или любой другой код, который вы можете сделать с помощью UserDefaults

Добавьте это в методе viewWillAppear.

import UIKit

class MainVC: UIViewController {

    override func viewWillAppear(_ animated: Bool) {

        if let Last_Update_Date = kUserDefults_("last_update_date") as? Date{

            print(Date().minutes(from: Last_Update_Date)) // Time Different in minutes

            if Date().minutes(from: Last_Update_Date) > 60{
                // update view's background
                self.view.backgroundColor = UIColor.red
                // update date in UserDefaults
                kUserDefults(Date() as AnyObject, key: "last_update_date")
            }
        }else{

            kUserDefults(Date() as AnyObject, key: "last_update_date")
        }
    }
}

Сохранить значение в UserDefaults

func kUserDefults(_ value : AnyObject, key : String ){
    let defults = UserDefaults.standard
    defults.setValue(value, forKey: key)
    defults.synchronize()
}

Получить значение из UserDefaults

func kUserDefults_( _ key : String) -> AnyObject? {
    let defults = UserDefaults.standard
    return defults.value(forKey: key ) as AnyObject?
}

Дата extension

extension Date {
    /// Returns the amount of minutes from another date
    func minutes(from date: Date) -> Int {
        return Calendar.current.dateComponents([.minute], from: date, to: self).minute ?? 0
    }
}
0 голосов
/ 25 октября 2018

Я думаю, что у вас есть две разные задачи:

  1. Выберите подходящий стиль представления в зависимости от текущего времени.(Я думаю, что это просто, просто получить местное время в viewWillAppear или в willMoveToWindow с NSDate).
  2. Обновление активного представления путем изменения времени.

Для решения второй задачи вы можете использовать таймеры.Просто используйте таймер, чтобы проверить время, для этого вы можете запланировать таймер на ближайшее время, где вы должны изменить стиль:

let timer = Timer(fire: Date(timeIntervalSinceNow: 1000.0), interval: 60.0 * 60.0, repeats:true) { (sender) in
            //check current time and update view's background;
            //or send notification about time
        }
RunLoop.current.add(timer, forMode: .common)

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

UPD
Я думаю, вам следует начать с самого начала.Сначала прочитайте о UIViewController , UIView , Центр уведомлений , Таймер .Также вы должны прочитать о событийно-управляемой архитектуре .После этого вы посмотрите на свое приложение и решите, где вы можете добавить функцию colorUpdate.
Если вам нужно полное решение без знания приложения, вы можете найти кого-то, кто может его создать для вас (на фрилансе или на работе или вкакое-то другое место, где вы можете найти аутсорсеров).

PS
Добавление функции colorUpdate в NotificationCenter - плохая идея, вы можете добавить этот метод в обработчик уведомлений.

...