2017-07-25 6 views
1

j'ai trouvé une réponse pour afficher le pourcentage de la batterie Le code est ci-aprèsY at-il une fonction qui retourne « temps jusqu'à ce que l'appareil de la batterie est complètement chargée »

class ViewController: UIViewController { 

@IBOutlet var infoLabel: UILabel! 

var batteryLevel: Float { 
    return UIDevice.current.batteryLevel 
} 
var timer = Timer() 

func scheduledTimerWithTimeInterval(){ 
    timer = Timer.scheduledTimer(timeInterval: 60, target: self, selector: #selector(self.someFunction), userInfo: nil, repeats: true) 
} 
func someFunction() { 

    self.infoLabel.text = String(format: "%.0f%%", batteryLevel * 100) 
     } 
override func viewDidLoad() { 
    super.viewDidLoad() 
    UIDevice.current.isBatteryMonitoringEnabled = true 
    someFunction() 
    scheduledTimerWithTimeInterval() 
    // Do any additional setup after loading the view, typically from a nib. 
} 


override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
}} 

Le problème est avec le temps restant

Merci à l'avance

+2

Si 'UIDevice.current.batteryState == .charging' alors vous pouvez estimer en mesurant le niveau de la batterie sur une période de temps - quand vous savez le taux auquel la batterie charge et le pourcentage restant, c'est une question de calcul simple. Notez que cette estimation ne sera probablement pas très précise. –

+0

@mag_zbc Je suis nouveau à rapide. Pouvez-vous expliquer cela en détail ou, si possible, pouvez-vous m'en fournir une démo ou un code source? –

+0

@mag_zbc, je suppose que l'estimation d'Apple (sur les Mac par exemple) est assez inexacte aussi, et dépend probablement de la même stratégie. – LinusGeffarth

Répondre

0

Vous pouvez essayer de mesurer le niveau de la batterie sur une période de temps et de calculer vous-même

var batteryLevel : Float = 0.0 
var timer = Timer() 

override func viewDidAppear(_ animated: Bool) { 
    if UIDevice.current.isBatteryMonitoringEnabled && UIDevice.current.batteryState == .charging { 
     batteryLevel = UIDevice.current.batteryLevel 
     // measure again in 1 minute 
     timer = Timer.scheduledTimer(timeInterval: 60, target: self, selector: #selector(self.measureAgain), userInfo: nil, repeats: false) 
    } 
} 

func measureAgain() { 
    let batteryAfterInterval = UIDevice.current.batteryLevel 

    // calculate the difference in battery levels over 1 minute 
    let difference = batteryAfterInterval - self.batteryLevel 

    let remainingPercentage = 100.0 - batteryAfterInterval 

    let remainingTimeInMinutes = remainingPercentage/difference 
} 

Notez que cette estimation ne sera pas très précis.

+0

pouvez-vous SVP expliquer moi quelle est l'utilisation de "batteryAfterInterval" –

2

n'a pas de fonction intégrée pour cela. Tout ce que vous pouvez faire est de vérifier le batteryState et quand il est charging, mesurer le temps entre les notifications UIDeviceBatteryLevelDidChange pour calculer la vitesse de charge et à partir de cette estimation, le temps de charge restant. Cependant, cette approche sera très imprécise du fait que le temps de charge n'est pas directement proportionnel au pourcentage de la batterie.

+0

il sera bon si vous pouvez me fournir une sorte de code de démo ou un code complet pour cela que je suis nouveau à ce –

0

Je ne l'ai pas essayé, mais get clue from this question/answer and convert to Swift.

Vous pouvez utiliser ci-dessous dans votre NSNotificationCenterViewWillAppear/ViewDidLoad. Cela vous avertira chaque fois que cad sera appelé en dessous du code.

func batteryCharged() { 
    let currBatteryLev: Float = UIDevice.currentDevice.batteryLevel 
     // calculate speed of chargement 
    let avgChgSpeed: Float = (prevBatteryLev - currBatteryLev)/startDate.timeIntervalSinceNow 
     // get how much the battery needs to be charged yet 
    let remBatteryLev: Float = 1.0 - currBatteryLev 
     // divide the two to obtain the remaining charge time 
    let remSeconds: TimeInterval = remBatteryLev/avgChgSpeed 
    // convert/format `remSeconds' as appropriate 
} 

Cet utilisateur peut vous être utile dans votre cas.

Et Oui ne pas oublier d'enlever NSNotificationCenter observer dans "viewWillDisAppear"