在新项目中工作: iOS>应用程序>游戏> SpriteKit,Swift,iPhone
在这里,我在我的函数中编写了一个GameScene.swift
接受十六进制颜色值和alpha双精度的函数.我将使用Swift文档,并引用我在网上看到的优雅解决方案.我注意到这个确切的代码在模拟器中编译,运行并显示iPhone5的构建目标的正确颜色.
当我的构建目标设置为iPhone5s时,完全相同的项目甚至不会编译.
找不到接受提供的参数的'init'的重载.
功能:
// colorize function takes HEX and Alpha converts then returns aUIColor object
func colorize (hex: Int, alpha: Double = 1.0) -> UIColor {
let red = Double((hex & 0xFF0000) >> 16) / 255.0
let green = Double((hex & 0xFF00) >> 8) / 255.0
let blue = Double((hex & 0xFF)) / 255.0
var color: UIColor = UIColor( red: Float(red), green: Float(green), blue: Float(blue), alpha:Float(alpha) )
return color
}
Run Code Online (Sandbox Code Playgroud)
相关电话didMoveToView
:
override func didMoveToView(view: SKView) {
// blue background color
self.backgroundColor = colorize( 0x003342, alpha:1.0)
}
Run Code Online (Sandbox Code Playgroud)
不可否认,我对iOS开发很新,但我想知道是什么导致编译器找不到这个初始化器?
编辑:暂时提出一个github
Mic*_*lum 33
它可能与Float和Double之间的不匹配有关.基本上,如果参数预计是CGFloats,则需要传递CGFloats.
let color = UIColor(red: CGFloat(red), green: CGFloat(green), blue: CGFloat(blue), alpha: CGFloat(alpha))
Run Code Online (Sandbox Code Playgroud)
这里要理解的重要一点是CGFloat在32位平台上定义为Float,在64位平台上定义为Double.因此,如果您明确使用Floats,Swift在32位平台上不会出现问题,但会在64位上产生错误.
从源代码中看,您应该使用CGFloat而不是Float
这应该工作
func colorize (hex: Int, alpha: Double = 1.0) -> UIColor {
let red = Double((hex & 0xFF0000) >> 16) / 255.0
let green = Double((hex & 0xFF00) >> 8) / 255.0
let blue = Double((hex & 0xFF)) / 255.0
var color: UIColor = UIColor( red: CGFloat(red), green: CGFloat(green), blue: CGFloat(blue), alpha:CGFloat(alpha) )
return color
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
15614 次 |
最近记录: |