将CMTime值转换为swift

时间:2018-10-10 09:17:12

标签: ios swift cmtime

我有以下两行代码,我将移至Swift,但我有些卡住了。

CMTime trimmingTime = CMTimeMake(lround(videoAsset.naturalTimeScale / videoAsset.nominalFrameRate), videoAsset.naturalTimeScale);
CMTimeRange timeRange = CMTimeRangeMake(trimmingTime, CMTimeSubtract(videoAsset.timeRange.duration, trimmingTime));

将下面一行转换为开头时,出现以下错误。

var trimmingTime: CMTime
trimmingTime = CMTimeMake(value: lround(videoAsset.naturalTimeScale / videoAsset.nominalFrameRate), timescale: videoAsset.naturalTimeScale)
  

二进制运算符'/'不能应用于类型为   “ CMTimeScale”(又名“ Int32”)和“ Float”

我尝试了几种不同的方法,但似乎无济于事。

2 个答案:

答案 0 :(得分:2)

  

二进制运算符'/'不能应用于类型为'CMTimeScale'(又名'Int32')和'Float'的操作数,因此您需要将CMTimeScale预测为Float。

您需要将CMTimeScale转换为Float

trimmingTime = CMTimeMake(value: lround(Float(videoAsset.naturalTimeScale) / videoAsset.nominalFrameRate), timescale: videoAsset.naturalTimeScale)

答案 1 :(得分:1)

您不能像其他语言那样简单地对不同类型的操作数进行快速数学运算。您需要手动输入类型。

在这里,您应将videoAsset.naturalTimeScale(即CMTimeScale和CMTimeScale类型为Int32)强制转换为Float才能正常工作。

Float(videoAsset.naturalTimeScale)

但是CMTimeMake的value键将接受值CMTimeValue类型的值。所以像这样使用它:

trimmingTime = CMTimeMake(value: CMTimeValue(Float(videoAsset.naturalTimeScale) / videoAsset.nominalFrameRate), timescale: videoAsset.naturalTimeScale)

再次使您的代码更快速,请使用CMTime而不是CMTimeMake作为

trimmingTime = CMTime(value: CMTimeValue(Float(videoAsset.naturalTimeScale) / videoAsset.nominalFrameRate), timescale: videoAsset.naturalTimeScale)