Help us understand the problem. What is going on with this article?

[Swift3.0]iOS・tvOSアプリを実行中に画面ロック(スリープ)しないようにする方法

More than 3 years have passed since last update.

画面ロックしてほしくないこともある

iOS版の浮世絵時計アプリを開発しているときに見つけた小ネタです。

浮世絵時計アプリは、iPhoneやiPadを時計代わりにするので、自動的に画面ロック(スリープ)してほしくありません。そこで、自動画面ロックを解除する方法を探して、見つけたのが下記のコードです。

UIApplication.shared.isIdleTimerDisabled = true

isIdleTimerDisabledプロパティ(初期値はfalse)にtrueを代入することで、スリープ状態へ移行する時間を監視しているIdleTimerをオフにすることができます。

このコードを、画面ロックを解除したい箇所で実行します。
例えば、ある画面だけロックしないようにする場合は、その画面(ViewController)のviewDidLoadで実行します。

    override func viewDidLoad() {
        super.viewDidLoad()

        UIApplication.shared.isIdleTimerDisabled = true
    }

アプリケーションを起動したときに適用したい場合は、下記のようにAppDelegateに書いてしまってもいいかもしれません。

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

        UIApplication.shared.isIdleTimerDisabled = true

        return true
    }

注意点

isIdleTimerDisabledのリファレンスを読むと、下記のような注意点が記載されています。

Important
You should set this property only if necessary and should be sure to reset it to false when the need no longer exists. Most apps should let the system turn off the screen when the idle timer elapses. This includes audio apps. With appropriate use of Audio Session Services, playback and recording proceed uninterrupted when the screen turns off. The only apps that should disable the idle timer are mapping apps, games, or programs where the app needs to continue displaying content when user interaction is minimal.

画面ロックを解除すると、画面がつきっぱなしになるので、バッテリーを消耗してしまいます。ユーザーのバッテリーを無駄にしないためにも、処理が終わったらすぐに画面ロックを元に戻すのをお忘れなく。

浮世絵時計アプリでは、viewDidDisappearで元に戻すようにしました。

    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)

        UIApplication.shared.isIdleTimerDisabled = false
    }

追記

tvOS版の浮世絵時計アプリにも、isIdleTimerDisabledを組み込んで動作確認しました。

Apple TVは、操作なしで一定時間経過→スクリーンセーバー表示→スリープという段階を踏みますが、isIdleTimerDisabled = trueの場合は、スクリーンセーバーも表示されなくなりました。

浮世絵時計アプリのように、コンテンツを流しておくアプリを開発する場合は、ぜひお試しください。

toshi586014
小説家でiOS・tvOS・watchOS・macOSアプリ開発者でアプリ開発講師でLINEスタンプ作者で主夫のフリー会社員。 またの名を、お好み焼きを焼けないお好み焼きクリエイター。 公開しているアプリはこちら→https://itunes.apple.com/jp/developer/toshiaki-nakamura/id822485897
http://toshi586014.net
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away