在 swift 中生成带有参数倾斜值数据的 UIColor
Generating a UIColor with arguments tilt value data in swift
我正在尝试制作一个应用程序,它会根据设备的倾斜角度更改背景颜色。我很容易找到设备的倾斜值,我似乎无法将倾斜值用作 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" 变量来更改背景颜色的绿色级别吗?
问题是 data.gravity.x returns Double 和 UIColor 需要一个介于 0.0 和 1.0 之间的 CGFloat 值。您需要将 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.
}
}
我正在尝试制作一个应用程序,它会根据设备的倾斜角度更改背景颜色。我很容易找到设备的倾斜值,我似乎无法将倾斜值用作 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" 变量来更改背景颜色的绿色级别吗?
问题是 data.gravity.x returns Double 和 UIColor 需要一个介于 0.0 和 1.0 之间的 CGFloat 值。您需要将 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.
}
}