在 TVML 中设置字体系列



在我的TVML应用程序中,我可以使用tv-text-style:none设置字体样式属性,例如字体大小和字体粗细,但是我无法设置字体系列属性,该属性似乎被忽略了:

var Template = function() { return `<?xml version="1.0"    encoding="UTF-8" ?>  
<document>  
    <head>  
        <style>  
            .customText {  
                tv-text-style: none;  
                tv-position: center;  
                color: white;  
                font-size: 40px;  
                font-weight: bold;  
                font-family: Courier;  
            }  
        </style>  
    </head>  
    <paradeTemplate>  
...  
                <listItemLockup>  
                    <title>Title</title>  
                    <relatedContent>  
                         <divTemplate>  
                             <title class="customText">abcABC</title>  
                         </divTemplate>  
                    </relatedContent>  
                </listItemLockup>  
...

我可以设置与系统字体系列不同的字体系列吗?

感谢您的帮助,

卢卡

如果要为标题使用自定义字体,则应实现将使用任何字体的自定义TVViewElement。首先,您需要实现自己的TVInterfaceFactory,可以这样做(适用于tvOS 2的Swift 9解决方案):

import UIKit
import TVMLKit
class MyFactory: TVInterfaceFactory {
    override func viewForElement(element: TVViewElement, existingView: UIView?) -> UIView? {
        switch element {
        case let element as MyText where element.elementName == "myCustomText":
            let view = MyTextView(frame: CGRectMake(0,0,100,50))
            view.text = "my text"
            return view
        default:
            break
        }
        return nil
    }
}

之后,您需要实现自定义 TVML 项目:

class MyText: TVTextElement {
    override var elementName: String {
        return "myCustomText"
    }
    var text: String? {
        guard let textValue = attributes?["text"] else { return nil }
        return textValue
    }
}

现在你需要为你的TVTextElement实现UIView:

class MyTextView: UIView {
    var label: UILabel!
    override init(frame: CGRect) {
        super.init(frame: frame)
    }
    var text : String {
        get {
            return self.text
        }
        set(value) {
            self.label = UILabel(frame: self.frame)
            self.label.text = value
            self.label.textColor = UIColor.whiteColor()
            self.label.font = UIFont(name: "Your custom font", size: 20.0)
            self.addSubview(self.label)
        }
    }
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

现在,您可以在TVML中使用自定义项目,如下所示:

<myCustomText text="hello world"></myCustomText>

另外,不要忘记在didFinishLaunchingWithOptions方法中注册您的自定义项目:

TVInterfaceFactory.sharedInterfaceFactory().extendedInterfaceCreator = MyFactory()
TVElementFactory.registerViewElementClass(MyText.self, forElementName: "myCustomText")

font-family现在可以在TVML中使用。无需再使用 TVInterfaceFactory 进行自定义字体支持。

例:

tv-text-style: 'none'
font-family: 'Times New Roman'

Apple TV 标记语言参考:字体系列

相关内容

  • 没有找到相关文章

最新更新