Генерация UIColor с данными значения наклона аргументов в 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)
}
}
}
Можно подумать, что он будет генерировать цвет, который варьируется в зависимости от наклона устройства, но это не так. Тип не поддерживается.
Кто-нибудь знает, как я мог бы использовать переменную "xColor", чтобы изменить уровень зеленого цвета фона?
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.
}
}