我正在尝试解析包含youtube视频的html文本。为了显示此视频,我使用了预览图像。
初始文本:
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>\n<p><iframe loading=\"lazy\" title=\"Forza Horizon 5 : RTX 4090 24GB ( 8K Maximum Settings RTX ON / DLSS ON )\" width=\"500\" height=\"281\" src=\"https://www.youtube.com/embed/NcHyE_N1QDI?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" allowfullscreen></iframe></p>\n<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>
字符串
然后它看起来像这些:
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. </p>\n<p><a href=\'https://www.youtube.com/watch?v=NcHyE_N1QDI\'><img src=\"https://img.youtube.com/vi/NcHyE_N1QDI/maxresdefault.jpg\" alt=\"\" width=\"393.0\"/></a></p>\n<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>
型
然后我使用NSMutableAttributedString并将新值赋给ExtView的attributedText属性。
问题是如何在预览图像上叠加一个播放按钮,以便用户理解这是一个视频。我假设这可以使用CSS完成,但不知道如何正确地将其嵌入代码中。
我的代码:
private func formatStringWithYTVideo(text: String, with width: Float) -> String {
let iframeTexts = matches(for: ".*iframe.*", in: text)
var newText = text
if !iframeTexts.isEmpty {
for iframeText in iframeTexts {
let iframeId = matches(for: "((?<=(v|V)/)|(?<=be/)|(?<=(\\?|\\&)v=)|(?<=embed/))([\\w-]++)", in: iframeText);
if !iframeId.isEmpty {
let htmlString = """
<p><a href='https://www.youtube.com/watch?v=\(iframeId[0])'><img src="https://img.youtube.com/vi/\(iframeId[0])/maxresdefault.jpg" alt="" width="\(width)"/></a></p>
"""
newText = newText.replacingOccurrences(of: iframeText, with: htmlString)
}
}
}
return newText
}
型
1条答案
按热度按时间n7taea2i1#
看起来这不能通过
UITextView
和CSS来实现,因为UITextView
不支持所需的属性。1:使用
WKWebView
而不是UITextView
。第二章:使用
enumerateAttributes(in:options:using:)
方法。获取属性列表,在其中找到所需的图像并替换它。您可以使用UIImageView
创建具有覆盖的图像,然后使用UIGraphicsImageRenderer
将其转换为UIImage
。