首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >随时间改变iPhone手电筒强度(Swift)

随时间改变iPhone手电筒强度(Swift)
EN

Stack Overflow用户
提问于 2015-12-28 16:45:49
回答 1查看 1.5K关注 0票数 0

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

我希望它像一个“时间线”,在这样的不同强度之间,强度会逐渐减弱:

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

偶尔,我想让手电筒闪现一点,使它看起来更像一个低电池的手电筒。可能是这样的:

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

我读过关于如何在这里上打开手电筒,以及如何制作定时器(使用NSTimer) 这里,但我不知道如何将它们结合起来,以使手电筒的强度随时间变化。

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

提前谢谢你!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-28 17:12:23

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

下面是一个如何做到这一点的示例(在全新的AppDelegate单视图应用程序的iOS中实现):

代码语言:javascript
复制
  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
    }
  }

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34497357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档