• WatchKit编程指南:Watch Apps文本、标签以及图片


    本章节由CocoaChina翻译组成员dada(github主页)翻译自WatchKit Programming Guide:Watch Apps--Text and LabelsWatch Apps--Images敬请勘误。

    文本和分类标签

    为了在Watch app中展示文本,使用标签对象。分类标签支持格式化的文本,可以在运行时被程序修改。

    要添加标签到界面控制器,可以把它拖到对应的故事版场景(storyboard),在这里指定标签的初始文本字符串和格式。WatchKit既支持标准的字体也可以自定义字体。图8-1展示了你可以使用的标准字体风格。

    图8-1标签的标准字体风格

    text_styles.png

    更多关于配置标签对象的信息,请查阅 WKInterfaceLabel Class Reference

    Using Custom Fonts 使用自定义字体

    除了标准字体风格,你可以定制经过格式化的字符串的字体。按照下面的方式来定制字体:

    · 在Watch app和WatchKit扩展包中都导入定制的字体文件。

    · 添加__UIAppFonts__键到你的Watch app中的Info.plist文件中,并用这个来指定添加到包中的字体。更多关于此键的信息,请查阅 Information Property List Key Reference

    注意:你必须在WatchKit扩展中导入字体,才能在运行时创建指定字体的字符串。当发送到Apple Watch的时候,字体的信息包含了属性字符串,在Watch app包中的字体拷贝将会渲染这个字体。

    使用自定义字体来格式化文本,使用字体信息来创建一个属性化字符串,并使用这个字符串来作为你标签的文本,就像Listing 8-1中展示的那样。字体的名字和尺寸由属性字符串编码而成,这样就可以用来更新用户Apple Watch的标签了。

    使用自定义的字体作为标签的字符串

    1
    2
    3
    4
    5
    6
    7
    8
         // Configure an attributed string with custom font information.
         UIFont* menloFont = [UIFont fontWithName:@"Menlo" size:12.0];
         NSAttributedString *attrString = [[NSAttributedString alloc]
           initWithString:@"My Formatted Text"
           attributes:@{NSFontAttributeName: menloFont}];
      
         // Set the text on the label object.
         [self.myCustomFontLabel setAttributedText:attrString];

    Customizing the System Font 配置系统字体

    配置系统字体,使用UIFontDescriptor对象来指定基于系统的新字体。列表 8-2 的例子展示了怎样让定制只使用小写字符的标准的系统字体。在转换系统字体到一个字体描述符后, 添加__kLowerCaseType__和__kLowerCaseSmallCapsSelector__属性(在Core Text framework中定义)然后字体描述符的结果来创建新的字体对象。

    指定系统字体为小写

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
         CGFloat fontSize = 18.0;
         UIFont *afont = [UIFont systemFontOfSize:fontSize];
         UIFontDescriptor *fontDescriptor =
              [[afont fontDescriptor] fontDescriptorByAddingAttributes:@{
              UIFontDescriptorFeatureSettingsAttribute : @[
                 @{    UIFontFeatureTypeIdentifierKey : @(kLowerCaseType),
              UIFontFeatureSelectorIdentifierKey :      @(kLowerCaseSmallCapsSelector) },],
         }];
      
         UIFont *smallCapFont = [UIFont fontWithDescriptor:fontDescriptor size:fontSize];

    国际化您的文本代码

    Watch apps能使用iOS apps想通的国际化技术方法。

    · 使用基于Xcode国际化支持的storyboard和xib文件。基于国际化可以让你仅仅只用一个storyboad文件就能支持所有的本地化。本地化字符串分别存在特定的区域语言字符串中。

    · 使用NSLocalizedString族的宏定义来让程序自动检索本地化字符串。

    · 通过NSNumberFormatter类使用用户所在区域和本地的设置来格式化数值型的值。

    · 通过NSDateFormatter类使用用户所在区域和本地设置来格式化时间。

    当要国际化你的应用,你主要考虑的是如何调整界面,让标签列表(还有其他文本的控制)能够足够容纳得下。比如,比起水平的排列三个按钮,垂直排列更好能给每一个标签的文本提供更长的容纳空间。

    更多关于国际化的信息,请查阅Internationalization and Localization Guide

    ----------------------------------------------------------------------------------------------------------

    图像

    WatchKit(苹果手表开发套件)提供下列方法将图片添加到你的内容里:

    · WKInterfaceImage用于展示单个的图片或者一组图片作为单个图像展示的内容。   

    · WKInterfaceGroupWKInterfaceButtonWKInterfaceController类允许你指定一张图作为某些内容的背景图。

    指定你的图像资源

    下面是当你创建图像资源时要注意的准则:

    · 尽量只用PNG的格式的图。

    · 保证创建的图像的尺寸是符合你的界面的。对于你不好控制的图像,使用setWidth:setHeight:方法来做自适应。

    使用命名的图片来提高执行效率

    下面是几种更换界面对象现有图片的方式:

    ·  使用 setImageNamed: 或 setBackgroundImageNamed:方法来分配一个已经存在于Watch app资源包里,或者是正在设备缓存中的图像。

    · 使用WatchKit的setImage:setImageData:setBackgroundImage:setBackgroundImageData:方法无线传输图像数据来扩展你的Watch app。

    用命名指定图像的好处是这些图不需要再从用户的iphone中无线传输到手表。当你指定了图片的命名,WatchKit只发送名称字符串到你的Watch app中,这样减少了时间和功耗。这个字符串用来检索Watch app包中的图像,或者从图片缓存中去取得。

    任何时候你在你的扩展中创建的__UIImage__对象,必须要先将存在于用户的iPhone上的图像对象发送到Apple Watch上才能使用。甚至使用__UIImage__的 imageNamed:方法来加载你的WatchKit扩展包资源,也不是从Watch app中得到的。

    在设备上缓存图像

    如果你频繁使用在你WatchKit扩展中创建的图像,可以把它们缓存到设备里,然后通过名称来引用。你必须在调用它们之前先缓存图片,使用__WKInterfaceDevice__的addCachedImage:name:addCachedImageWithData:name:方法。

    使用缓存图片需要注意以下两点:

    · 对于WKInterfaceImage对象,调用__setImageNamed: __方法,指定缓存图像的名称。

    · 对于WKInterfaceGroupWKInterfaceButton对象,调用__setBackgroundImageNamed:__方法,指定缓存中的名称

    Apple Watch图像的缓存是限制尺寸的,每个app大概可获得20MB的缓存空间。缓存是持久的并可以在启动的Watch app之间使用。当你达到最大缓存时,WachKit会丢弃比较老的图像,把空间让给新分配的图像。

  • 相关阅读:
    关于MVC与MVP的理解
    使用JDBC连接数据库
    常见DML语句汇总
    java字符常量
    java中Map,List与Set的区别
    面向对象重写(override)与重载(overload)区别
    嵌入式系统的体系结构 图解
    使用webpack + momentjs时, 需要注意的问题
    联想电脑屏幕亮度无法调节
    树形数据构造
  • 原文地址:https://www.cnblogs.com/itlover2013/p/4114960.html
Copyright © 2020-2023  润新知