我正在使用 CATextLayer 在视频上添加文本。但是当导出过程完成时,文本大小不会因框架位置而改变。字体大小打印在日志中,但 CATextLayer 字体大小不变。这是我完成的代码。
let mainCompositionInst = AVMutableVideoComposition()
var naturalSize = CGSize()
naturalSize = CGSize(width: (videoAssetTrack?.naturalSize.width)!, height:(videoAssetTrack?.naturalSize.height)!)
var renderWidth = CGFloat()
var renderHeight = CGFloat()
renderWidth = naturalSize.width
renderHeight = naturalSize.height
mainCompositionInst.renderSize = CGSize(width: renderWidth, height: renderHeight)
mainCompositionInst.instructions = [mainInstruction]
mainCompositionInst.frameDuration = CMTimeMake(1, 30)
let myAttributes = [
NSFontAttributeName: UIFont(name: "HelveticaNeue-Thin", size: 30)!, // font
NSForegroundColorAttributeName: UIColor.white // text color
]
let myAttributedString = NSAttributedString(string: "Title", attributes: myAttributes )
let titleLayer = CATextLayer()
titleLayer.string = myAttributedString
titleLayer.frame = CGRect(x: (dragView?.frame.origin.x)!, y: (dragView?.frame.origin.y)!, width: (dragView?.frame.size.width)!, height: (dragView?.frame.height)!)
titleLayer.shadowOpacity = 0.5
titleLayer.isWrapped = true
print("Font Size \(String(describing: titleLayer.fontSize))")
let overlayLayer = CALayer()
overlayLayer.addSublayer(titleLayer)
overlayLayer.frame = CGRect(x: 0, y: 0, width: naturalSize.width, height: naturalSize.height)
overlayLayer.masksToBounds = true
let parentLayer = CALayer()
let videoLayer = CALayer()
parentLayer.frame = CGRect(x: 0, y: 0, width: naturalSize.width, height: naturalSize.height)
videoLayer.frame = CGRect(x: 0, y: 0, width: naturalSize.width, height: naturalSize.height)
parentLayer.addSublayer(videoLayer)
parentLayer.addSublayer(overlayLayer)
mainCompositionInst.animationTool = AVVideoCompositionCoreAnimationTool.init(postProcessingAsVideoLayer: videoLayer, in: parentLayer)
最佳答案
只需添加一行,代码就可以正常工作 titleLayer.shouldRasterize = true
关于ios - 从 AVAssetExportSession 导出视频时,CATextlayer 字体大小不会改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44631283/