包 | flashx.textLayout.compose |
接口 | public interface ISWFContext |
实现器 | TextContainerManager |
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
应用程序使用此接口控制 TextLine 创建的原因有两个:
- 重用嵌入字体:如果应用程序希望使用嵌入在加载的 SWF 文件中的字体,那么,如果加载的 SWF 文件中的上下文中创建了 TextLine,则应用程序可访问该字体。
-
重用现有的 TextLine 实例:重用现有的 TextLine 实例会使重新合成比较快。TLF 在内部重用现有的 TextLine 实例。当 TLF 识别 TextLine 是现存的实例时,TLF 通过调用
TextBlock.recreateTextLine()
而不是TextBlock.createTextLine()
来重用 TextLine。
您的应用程序可能包含其他可重用的 TextLine 实例。手动重用现有的 TextLine 实例:
- 捕获对
TextBlock.createTextLine()
的调用,然后 - 使用现存的 TextLine 实例调用
TextBlock.recreateTextLine()
,而不是调用TextBlock.createTextLine()
。
但请注意,TextBlock.recreateTextLine()
仅在 Flash Player 10.1 和更高版本中可用。
相关 API 元素
公共方法
方法 | 由以下参数定义 | ||
---|---|---|---|
在客户端控制的上下文中调用方法的方式。 | ISWFContext |
方法详细信息
callInContext | () | 方法 |
public function callInContext(fn:Function, thisArg:Object, argArray:Array, returns:Boolean = true):*
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
在客户端控制的上下文中调用方法的方式。
参数
fn:Function — 要调用的函数或方法
| |
thisArg:Object — 该函数的 this 指针
| |
argArray:Array — 该函数的参数
| |
returns:Boolean (default = true ) — 若为 true,则该函数会返回一个值
|
* — 该函数返回的任何内容(如果返回任何内容)。
|
相关 API 元素
示例 如何使用本示例
EmbeddedFontLineCreator.as
以下示例说明如何创建 ISWFContext 实现,以便其它 SWF 文件可以访问嵌入的字体。
EmbeddedFontLineCreator 类实现 ISWFContext 并嵌入字体。其它类可以加载基于 EmbeddedFontLineCreator 的 SWF 文件并访问嵌入的字体。
package flashx.textLayout.compose.examples { import flash.display.Sprite; import flashx.textLayout.compose.ISWFContext; public class EmbeddedFontLineCreator extends Sprite implements ISWFContext { [Embed( source="C:\\Windows\\Fonts\\BirchStd.otf", fontFamily="embeddedBirchStd", cff="embedAsCFF", unicodeRange="U+0041-U+005A, U+0061-U+007A, U+003F")] public var embeddedBirchStdFont:Class; public function callInContext(fn:Function, thisArg:Object, argsArray:Array, returns:Boolean=true):* { if (returns) return fn.apply(thisArg, argsArray); fn.apply(thisArg, argsArray); } } }
FontConsumer.as
以下示例说明如何创建可以访问嵌入在另一个 SWF 文件中的字体的类。FontConsumer 类加载实现 ISWFContext 接口的 SWF 文件。具体来说,该示例加载 EmbeddedFontLineCreator(即,实现 ISWFContext 的示例类)的实例。
FontConsumer 类首先加载 EmbeddedFontLineCreator.swf 文件并等待加载函数运行成功。一旦加载成功,事件侦听器函数 createFlow()
就创建文本容器和文本流。然后事件侦听器创建流合成器,并将加载的 SWF 文件与流合成器的 swfContext
属性相关联。通过此关联,FontConsumer 实例可以调用加载的 SWF 文件的上下文中的方法。由于可以访问 EmbeddedFontLineCreator 的上下文,因此 FontConsumer 实例可以使用嵌入在 EmbeddedFontLineCreator 中的字体。
package flashx.textLayout.compose.examples { import flash.display.Loader; import flash.display.Sprite; import flash.events.Event; import flash.net.URLRequest; import flash.text.engine.FontLookup; import flashx.textLayout.compose.StandardFlowComposer; import flashx.textLayout.container.ContainerController; import flashx.textLayout.conversion.TextConverter; import flashx.textLayout.elements.Configuration; import flashx.textLayout.elements.TextFlow; import flashx.textLayout.formats.TextLayoutFormat; public class FontConsumer extends Sprite { private var fontSWF:Loader = new Loader(); public function FontConsumer() { var fontSWFURL:URLRequest = new URLRequest("EmbeddedFontLineCreator.swf"); fontSWF.contentLoaderInfo.addEventListener( Event.COMPLETE, createFlow ); fontSWF.load( fontSWFURL ); } private function createFlow( event:Event ):void { var container:Sprite = new Sprite(); this.addChild( container ); var controller:ContainerController = new ContainerController( container, 600, 700 ); var format:TextLayoutFormat = new TextLayoutFormat(); format.fontFamily = "embeddedBirchStd"; format.fontLookup = FontLookup.EMBEDDED_CFF; var config:Configuration = new Configuration(); config.textFlowInitialFormat = format; var flow:TextFlow = TextConverter.importToFlow( "Shall I compare thee to a summer's day?", TextConverter.PLAIN_TEXT_FORMAT, config ); flow.flowComposer = new StandardFlowComposer(); var embeddedFontLineCreator:Class = fontSWF.contentLoaderInfo.applicationDomain.getDefinition( "flashx.textLayout.compose.examples.EmbeddedFontLineCreator" ) as Class; flow.flowComposer.swfContext = new embeddedFontLineCreator(); flow.flowComposer.addController( controller ); flow.flowComposer.updateAllControllers(); } } }
Tue Jun 12 2018, 11:04 AM Z