套件 | flashx.textLayout.compose |
介面 | public interface ISWFContext |
實作者 | TextContainerManager |
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10, AIR 1.5 |
應用程式有兩種原因使用此介面來控制 TextLine 的建立:
- 重複使用內嵌字體:如果應用程式要使用所載入 SWF 檔案中內嵌的字體,當 TextLine 建立於所載入 SWF 檔案的內容時,應用程式便可存取字體。
-
重複使用現有的 TextLine 實體:重複使用現有的 TextLine 實體可加快重新撰寫的時間。TLF 於內部重複使用現有的 TextLine 實體。當 TLF 辨識出現有的 TextLine 時,TLF 會呼叫
TextBlock.recreateTextLine()
而非TextBlock.createTextLine()
,以重覆使用 TextLine。
應用程式可能有額外的 TextLine 實體可重覆使用。手動重覆使用現有的 TextLine 實體:
- 攔截對於
TextBlock.createTextLine()
的呼叫,然後 - 以現有的 TextLine 實體呼叫
TextBlock.recreateTextLine()
而非TextBlock.createTextLine()
。
請注意,只有在 Flash Player 10.1 或更新的版本才能使用 TextBlock.recreateTextLine()
。
相關 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
以下範例顯示如何建立允許其他 SWF 檔案存取內嵌字體的 ISWFContext 實作。
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, 03:47 PM Z