【问题标题】:Generating a UIColor with arguments tilt value data in swift快速生成带有参数倾斜值数据的 UIColor
【发布时间】:2015-04-26 03:48:50
【问题描述】:

我正在尝试制作一个应用程序,该应用程序将根据设备的倾斜角度改变背景颜色。我在查找设备的倾斜值时没有问题,但我似乎无法将倾斜值用作 UIColor 中的参数。

我有以下代码:

let manager = CMMotionManager()

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    manager.gyroUpdateInterval = 0.1
    manager.startGyroUpdates()

    if manager.deviceMotionAvailable {
        manager.deviceMotionUpdateInterval = 0.01
        manager.startDeviceMotionUpdatesToQueue(NSOperationQueue.mainQueue()) {
            [weak self] (data: CMDeviceMotion!, error: NSError!) in

            let xColor = data.gravity.x


            self!.view.backgroundColor = UIColor(red: 155/255, green: xColor, blue: 219/255, alpha: 1)
        }
    }

}

您会认为它会根据设备的 x 倾斜度生成不同的颜色,但事实并非如此。不支持该类型。

有人知道我如何使用“xColor”变量来改变背景颜色的绿色水平吗?

【问题讨论】:

    标签: ios iphone swift motion tilt


    【解决方案1】:

    问题在于 data.gravity.x 返回一个 Double 并且 UIColor 期望 CGFloat 值介于 0.0 和 1.0 之间。您需要将 Double 转换为 CGFloat 并使用 abs() 方法从负数中提取正数。

    import UIKit
    import CoreMotion
    class ViewController: UIViewController {
        let motionManager = CMMotionManager()
        override func viewDidLoad() {
            super.viewDidLoad()
            motionManager.gyroUpdateInterval = 0.1
            motionManager.startGyroUpdates()
            if motionManager.deviceMotionAvailable {
                motionManager.deviceMotionUpdateInterval = 0.01
                motionManager.startDeviceMotionUpdatesToQueue(NSOperationQueue.mainQueue(), withHandler: { (data: CMDeviceMotion!, error: NSError!) -> Void in
                    let x = data.gravity.x
                    let y = data.gravity.y
                    let z = data.gravity.z
                    self.view.backgroundColor = UIColor(
                        red: CGFloat(abs(x)),
                        green: CGFloat(abs(y)),
                        blue: CGFloat(abs(z)),
                        alpha: 1.0)
                })
            }
        }
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2013-10-17
      • 2021-04-23
      • 1970-01-01
      • 2019-05-13
      • 2016-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多