随着时间的推移改变iPhone手电筒强度(Swift)

时间:2015-12-28 16:45:50

标签: ios iphone swift flashlight

我想制作一个用Swift编程的iPhone应用程序,它将随着时间的推移改变不同强度之间的手电筒。这样做的目的是复制电池电量不足的手电筒。

我希望它像一个"时间轴",强度会在不同强度之间褪色,如下所示:

  • 0分钟:100%
  • 100分钟:0%

偶尔我会希望手电筒闪一下,让它看起来更像电池电量低的手电筒。它可能是这样的:

  • 30分钟:70%
  • 30分钟1秒:100%
  • 30分2秒:70%
  • 30分3秒:20%
  • 30分6秒:70%

我已阅读有关如何在here上启用手电筒,以及如何制作计时器(使用NSTimerhere,但我无法弄清楚如何将它们组合起来,以使手电筒强度随时间变化。

实现这一目标的最佳方法是什么?

提前谢谢!

1 个答案:

答案 0 :(得分:3)

使用函数setTorchModeOnWithLevel设置级别,您可以使用计时器设置级别更改的时间。

以下是如何执行此操作的示例(在全新的iOS单一视图应用程序的AppDelegate中实现):

  var timer: NSTimer?

  func applicationDidBecomeActive(application: UIApplication) {
    timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "delayedAction", userInfo: nil, repeats: true)
  }

  let maxLightLevel = 5
  var lightLevel = 5

  func delayedAction() {
    guard let device = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)
      else {
        timer?.invalidate()
        return
    }
    if let _ = try? device.lockForConfiguration() {
      defer { device.unlockForConfiguration() }
      if lightLevel == 0 {
        timer?.invalidate()
        device.torchMode = .Off
      }
      else {
        try! device.setTorchModeOnWithLevel(Float(lightLevel)/Float(maxLightLevel))
      }
      --lightLevel
    }
  }

此代码只是一个粗略的示例,应该添加适当的行为来处理切换应用程序,抛出异常等等。