25

这是我的代码。我将两个值传递给CGRectMake(..)并获取和错误。

let width = CMVideoFormatDescriptionGetDimensions(device.activeFormat.formatDescription as CMVideoFormatDescriptionRef!).width
// return Int32 value

let height = CMVideoFormatDescriptionGetDimensions(device.activeFormat.formatDescription as CMVideoFormatDescriptionRef!).height
// return Int32 value

myLayer?.frame = CGRectMake(0, 0, width, height)
// returns error: '`Int32`' not convertible to `CGFloat`

如何转换Int32CGFloat不返回错误?

4

2 回答 2

69

要在数值数据类型之间进行转换,请创建目标类型的新实例,将源值作为参数传递。所以要将 an 转换Int32为 a CGFloat

let int: Int32 = 10
let cgfloat = CGFloat(int)

在您的情况下,您可以执行以下操作:

let width = CGFloat(CMVideoFormatDescriptionGetDimensions(device.activeFormat.formatDescription as CMVideoFormatDescriptionRef!).width)
let height = CGFloat(CMVideoFormatDescriptionGetDimensions(device.activeFormat.formatDescription as CMVideoFormatDescriptionRef!).height)

myLayer?.frame = CGRectMake(0, 0, width, height)

或者:

let width = CMVideoFormatDescriptionGetDimensions(device.activeFormat.formatDescription as CMVideoFormatDescriptionRef!).width
let height = CMVideoFormatDescriptionGetDimensions(device.activeFormat.formatDescription as CMVideoFormatDescriptionRef!).height

myLayer?.frame = CGRectMake(0, 0, CGFloat(width), CGFloat(height))

请注意,swift 中的数字类型之间没有隐式或显式类型转换,因此您也必须使用相同的模式将 a 转换IntInt32或转换为UInt等。

于 2014-11-27T12:41:58.490 回答
2

只需显式转换widthheight使用初始化程序CGFloatCGFloat's

myLayer?.frame = CGRectMake(0, 0, CGFloat(width), CGFloat(height))
于 2014-11-27T12:39:34.067 回答