前置き
バッテリ残量とか、充電ステータスとかによって、
画面表示がいろいろ切り替わるような機能を作りたいと思って、
とりあえずまずはそのあたりを拾うコードの確認をしました。
開発環境
前回まで書いてなかったけど、これがすごく大事だな〜って最近すごく痛感してます。
端末:MacBook Pro/MacOS 10.14.5(Mojave)
Xcode:10.2.1
Swift:5
画面イメージ
充電してる時 |
---|
充電してない時 |
---|
ソース
※storyboardの設定は割愛します。
UILabelを3つ配置した以外は何もしてないので。
viewController.swift
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var lblBattery: UILabel!
@IBOutlet weak var lblCharge: UILabel!
@IBOutlet weak var lblChargeStatus: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
DispInitialize()
timerFiring()
}
func timerFiring() {
let timer = Timer(timeInterval: 1,
target: self,
selector: #selector(getBatteryStatus),
userInfo: nil,
repeats: true)
RunLoop.main.add(timer, forMode: .default)
}
func DispInitialize() {
lblBattery.isEnabled = false
lblCharge.isEnabled = false
lblChargeStatus.isEnabled = false
lblCharge.text = "充電してるかって?"
}
@objc func getBatteryStatus() {
UIDevice.current.isBatteryMonitoringEnabled = true
let batRemain = UIDevice.current.batteryLevel
lblBattery.text = NSString(format: "%.1f", batRemain * 100) as String + "%"
let batStatus: UIDevice.BatteryState = UIDevice.current.batteryState
switch batStatus {
case .charging:
lblChargeStatus.text = "充電中ですよ。"
case .full:
lblChargeStatus.text = "フルチャージ!!"
case .unplugged:
lblChargeStatus.text = "充電してないっす。"
case .unknown:
lblChargeStatus.text = "わかんね。"
default:
lblChargeStatus.text = "マジでわかんね。"
}
UIDevice.current.isBatteryMonitoringEnabled = false
}
}
まとめ
”実装”ってほどでもないけど、今回はてこずらずにサラッと第1段階はクリアできた。(いっつも何かとサンプル通りにソース書いても同じように動かなくて詰まることが多い。)
内容とは直接関係ないけど、画像の貼り方(サイズ調整と枠線のつけ方)を下記エントリを参考にさせて貰いました。markdownも使いこなしたい。
・Markdown の画像に枠線をつける
https://qiita.com/nori-dev-akg/items/b9f1709418f39a473d08
・markdownでの画像リサイズ
https://qiita.com/shti_f/items/b819d7fd8cb79ae29687