在TVML中设置字体系列

时间:2016-03-01 22:29:32

标签: fonts tvos font-family tvml

在我的TVML应用程序中,我可以使用tv-text-style:none设置字体样式属性,例如font-size和font-weight,但是我无法设置font-family属性,这似乎是忽略:

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>  
...

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

感谢您的帮助,

卢卡

2 个答案:

答案 0 :(得分:1)

如果要为标题使用自定义字体,则应实现将使用任何字体的自定义TVViewElement。 首先,你需要实现自己的TVInterfaceFactory,它可以这样做(Swift 2解决方案对于tvOS 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")

答案 1 :(得分:1)

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

示例:

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

Apple TV Markup Language Reference: font-family