在WatchKit中设置除系统之外的其他字体(Apple Watch)

时间:2015-04-01 16:11:56

标签: ios swift watchkit

我有一个Apple Watch应用程序使用Menlo Bold字体作为标签。

在第一个支持watchkit的Xcode版本中,我能够将故事板中的标签字体更改为Menlo Bold 36,一切正常。

在cnt版本(Xcode 6.2)中已经不可能了,所以我找到了关于如何在Apple Watch中设置自定义字体的教程,http://www.tech-recipes.com/rx/53710/how-do-i-use-custom-fonts-in-my-apple-watch-app/

我在本教程中找到了这段代码:

func printFonts() {
    let fontFamilyNames = UIFont.familyNames()
    for familyName in fontFamilyNames {
        println("------------------------------")
        println("Font Family Name = [\(familyName)]")
        let names = UIFont.fontNamesForFamilyName(familyName as String)
        println("Font Names = [\(names)]")
    }
}

此代码打印可用字体 它用于查看为什么是您添加的字体的名称。

在这个阶段我还没有添加任何自定义字体,但我运行此功能只是为了查看默认情况下Apple Watch上可用的字体。
运行后我发现:

/* lot of fonts before */
------------------------------
Font Family Name = [Menlo]
Font Names = [[Menlo-BoldItalic, Menlo-Regular, Menlo-Bold, Menlo-Italic]]
------------------------------
/* lot of fonts after */

看起来我的Menlo-Bold在Apple Watch上可用,但我无法在StoryBoard中选择它。

所以,我觉得这很好,我不需要添加字体我会用它。

这是我的代码:

    // must maee attributed text
    let attributedTextForHour = NSAttributedString(
        string: "IS IT WORKING",
        attributes: NSDictionary(object: UIFont(name: "Menlo-Bold", size: 36)!, forKey:NSFontAttributeName))

    // with atributex text
    mylabel.setAttributedText(attributedTextForHour)

当我在模拟器中运行此代码时,标签的字体不会改变 还有一些其他奇怪的事情:

  • 在调试器中,当我在mylabel.setAttributedText(attributedTextForHour)上设置断点并快速查看attributedTextForHour时,它会以正确的字体显示。

所以在调试器中它很好,但在模拟器上它不是。

那么如何解决这个问题?

我没有Apple Watch,所以我可以看到真实设备上发生了什么。

所以,我不知道我的代码中是否存在某些问题,或者这是Apple的错误形式。

如果某人可以在计算机上测试并报告结果,那么这也很有用。

也许整个问题是因为我没有从外面添加Menlo Bold字体而且我正在使用printFont()函数显示的内容。 所以如果有人知道我可以在哪里下载Menlo Bold字体,请提供链接,以便我也可以测试。

1 个答案:

答案 0 :(得分:3)

我设法解决了这个问题,所以我要为后代发帖。

我从中学到了很少的东西(工作3小时后)

如果要添加已在printFonts()中打印的字体,事情会变得复杂。

您不能使用相同的名称添加它,因此您必须使用不同的名称添加它,我称之为Menlo-Bold-My.otf,您必须更改某些字体ID。 所以Menlo-Bold-My.otf与Apple的Menlo-Bold.otf相同。

为了转换,操作字体,我使用了程序http://fontforge.github.io/en-US/