2

ANE (自分で作成したもの) を Flex モバイル プロジェクトに追加すると問題が発生します。

問題は、オブジェクトのサイズが ANE を追加する前とは異なることです。この ANE は使用したことがなく、追加しただけです。

ANE を追加する前の画像を次に示します。

ここに画像の説明を入力

そして、ANE を追加した後の画像:

ここに画像の説明を入力

ご覧のとおり、アプリ全体のサイズが異なります。どれが問題になるか知っていますか?

前もって感謝します

**更新情報**

iOS のコード:

#import "FlashRuntimeExtensions.h"

FREContext eventContext;

FREObject init(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[])
{
    eventContext = ctx;

    NSLog(@"init");

    return NULL;
}


void CameraExtContextInitializer(void* extData, const uint8_t* ctxType, FREContext ctx, uint32_t* numFunctionsToTest, const FRENamedFunction** functionsToSet)
{
    NSLog(@"camera ext context initializer");
    *numFunctionsToTest = 1;

    FRENamedFunction* func = (FRENamedFunction*) malloc(sizeof(FRENamedFunction) * *numFunctionsToTest);

    func[0].name = (const uint8_t*) "init";
    func[0].functionData = NULL;
    func[0].function = &init;

    *functionsToSet = func;
}

void CameraExtensionUniversalInitializer(void** extDataToSet, FREContextInitializer* ctxInitializerToSet, FREContextFinalizer* ctxFinalizerToSet)
{
    NSLog(@"Camera extension initializer");
    *extDataToSet = NULL;
    *ctxInitializerToSet = &CameraExtContextInitializer;
}

AS のライブラリのコード:

package com.xxx.Controller
{   
    import flash.events.EventDispatcher;
    import flash.events.IEventDispatcher;
    import flash.events.StatusEvent;
    import flash.external.ExtensionContext;

    public class ReaderDeviceExtensionController extends EventDispatcher
    {

        private static var _instance:ReaderDeviceExtensionController;
        private var extContext:ExtensionContext;

        public function ReaderDeviceExtensionController(enforcer:SingletonEnforcer)
        {
            super();
            extContext = ExtensionContext.createExtensionContext( "com.xxx.Controller", "" );

            if ( !extContext ) {
                throw new Error( "Reader device native extension is not supported on this platform." );
            }

        }

    public static function get instance():ReaderDeviceExtensionController {
        if ( !_instance ) {
            _instance = new ReaderDeviceExtensionController( new SingletonEnforcer() );
            _instance.init();
        }

        return _instance;
    }

    public function dispose():void { 
        extContext.dispose(); 
    }

    private function init():void {
        extContext.call( "init" );
    }
}
}

class SingletonEnforcer {

}

Extension.xml:

<extension xmlns="http://ns.adobe.com/air/extension/3.1"> 
    <id>com.xxx.Controller</id> 
    <versionNumber>0.0.1</versionNumber> 
    <platforms>
        <platform name="iPhone-ARM"> 
            <applicationDeployment> 
                <nativeLibrary>libTestSimpleAne.a</nativeLibrary>
                <initializer>CameraExtensionUniversalInitializer</initializer>
            </applicationDeployment>
        </platform>
    </platforms> 
</extension>

次の ADT コマンドで ANE をビルドします。

adt -package -target ane MWCameraNativeExtension.ane extension.xml -swc NativeDevicePluginForCamera.swc -platform iPhone-ARM -C ios .

Flex での私のアプリケーションのコード:

<?xml version="1.0" encoding="utf-8"?>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009" 
        xmlns:s="library://ns.adobe.com/flex/spark" title="HTMLMainContent">
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>
    <s:Label x="346" y="290" fontSize="16" paddingLeft="20" text="HI HI HI"/>
</s:View>
4

1 に答える 1

4

これはiPad 3で実行されていますか?私の推測では、ネイティブ拡張機能を使用しているときに、誤って Retina 解像度のロックを解除していると思われます。

Flash Builder / パッケージャーが使用するデフォルトの iOS SDK は、iPad 3 の Retina 解像度をサポートしていない古いバージョンです。そのため、ネイティブ拡張なしでアプリケーションをパッケージ化すると、iPad 2 の解像度が得られ、iOS はすべてをスケーリングします。ネイティブ拡張機能を使用し、新しい iOS SDK を指定すると、デバイスのネイティブ解像度が自動的に使用されます。

拡張子が含まれている場合と含まれていない場合で、stage.stageWidth と stage.stageHeight をトレースしてみてください。また、Project Properties -> Flex Build Packaging -> Apple iOS -> Native Extensions -> Apple iOS SDK ボックスをチェックインします。それが設定されている場合は、私が説明した問題が発生している可能性が最も高いです。

于 2013-02-22T13:29:32.473 に答える