2017-06-03 11 views
0

私はすべてのすべてのアプリケーション(すべてのビューコントローラ)にバックグラウンドを持っており、その時刻に基づいて変更したいと考えています。時間が午前6時であれば「背景1」を表示し、午後9時を超える場合には「背景2」を表示する必要があります。私は現在の時刻が定義された時間以上であるかどうかをチェックするためにNSTimerを使用することを考えています。背景を変更するために、私はUIViewControllerのためにExtensionを使うことを考えています。より良い解決策があれば、それを分かち合うことができます。日時の異なる時刻に背景を変更する - iOS

答えて

3

あなたはこのようにそれを行うことができます。

  1. 背景画像
のみ
  • があなたのコントロールを作る時間を取得するために拡張を使用して、時間
  • を解析し、変更するための拡張を作成します。

    コード例説明のコメントをチェックアウト

    import UIKit 
    
    extension Date { 
        var hour: Int { return Calendar.current.component(.hour, from: self) } // get hour only from Date 
    } 
    
    class ViewController: UIViewController { 
        var timer = Timer() 
    
        override func viewDidLoad() { 
         super.viewDidLoad() 
    
         // Declare an observer for UIApplicationDidBecomeActive 
         NotificationCenter.default.addObserver(self, selector: #selector(scheduleTimer), name: .UIApplicationDidBecomeActive, object: nil) 
    
         // change the background each time the view is opened 
         changeBackground() 
        } 
    
        func scheduleTimer() { 
         // schedule the timer 
         timer = Timer(fireAt: Calendar.current.nextDate(after: Date(), matching: DateComponents(hour: 6..<21 ~= Date().hour ? 21 : 6), matchingPolicy: .nextTime)!, interval: 0, target: self, selector: #selector(changeBackground), userInfo: nil, repeats: false) 
         print(timer.fireDate) 
         RunLoop.main.add(timer, forMode: .commonModes) 
         print("new background chenge scheduled at:", timer.fireDate.description(with: .current)) 
        } 
    
        func changeBackground(){ 
         // check if day or night shift 
         self.view.backgroundColor = 6..<21 ~= Date().hour ? .yellow : .black 
    
         // schedule the timer 
         scheduleTimer() 
        } 
    } 
    
  • +1

    エレガントで素敵 - > +1 –

    +0

    私はUsageパートを1回限りのイベントにすることができます。私はすべてのビューコントローラでそれを行うのではなく、一度それをやりたい。 –

    +0

    @HosApでは、アプリケーションがアクティブになるたびに呼び出されるAppDelete関数の 'func applicationDidBecomeActive(_ application:UIApplication)'関数で "usage"コードを使用することができます。 –

    関連する問題