ios - 从 AVAssetExportSession 导出视频时,CATextlayer 字体大小不会改变

标签 ios iphone swift3 calayer

我正在使用 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/

相关文章:

swift3 - NotificationCenter 发布以更新主线程上的 UI 元素?

ios - UITextField 最多可容纳小数点前 10 个数字和小数点后最多三个数字

ios - Web 服务向移动客户端发送信息

android - FileTransfer Cordova下载路径

iphone - 获取文件名到 NSArray

core-data - Swift 3 从 appDelegate 中的 SQL 文件预加载

html - <button type ="submit"> 在 iPhone 上不能是 'pressed'

iphone - 如何在 View 上添加触摸并检测 UIImageView,以便我可以移动它而不在其上添加一个?

iphone - 如何知道谁是第一响应者?

ios - 简单的Webview:navigationDelegate在启动时崩溃