Tag { Objectice-C } 一覧

[AIR3][ANE][iOS] iOSでAIR Native Extention (iOSからイベントを受け取る)

Category:{ AIR, Native Extention, Objective-C }  Tag:{, , } Comments:{ No Comments }
Posted:{ 2011.12.11 07:45:28 }

ios ane fredispatchstatuseventasync

AIR Native Extention (以下ANE) で ネイティブ からAIR側にイベントを送出するには FREDispatchStatusEventAsync() を実装します。
この関数は、ネイティブからas側にStatusEventを送出できる関数です。

as3 サンプル

まず.aneに含めるSWCライブラリ側で、コンテキストにStatusEventをリスナーしておきます。

//〜略〜    
_context = ExtensionContext.createExtensionContext("[エクステンションID]", "type");
_context.addEventListener(StatusEvent.STATUS, onStatusEvent);
 
//〜略〜    
private function onStatusEvent(event:StatusEvent):void{
	trace(event.code,event.level);
	dispatchEvent(event);
}

Objective-C サンプル

次にC側で、イベントを送出したい部分に下記のように記述します。

 FREDispatchStatusEventAsync(
    context ,
    (uint8_t*)[@"hogehoge" UTF8String], 
    (uint8_t*)[@"fugagufa" UTF8String]); 
)

第1引数は、ContextInitializer の第三引数で受け取った context を保持しておいた物を渡します。
第2、第3引数に指定した値がそれぞれ、StatusEvent の code 、level プロパティに格納されます。

※ContextInitializerって何?って方はAKABANAさんのブログを参照。

ANEでネイティブから送出できるイベントは、StatusEvent のみですが、上記の様に code や level がカスタマイズできるので、as側ではそのプロパティでイベントの種類を判断して振り分けるような実装にしましょう。

イベント送出をチェック

FREDispatchStatusEventAsync() は戻り値で、イベント送出が成功したかどうか判断できます。
例えば先程のコードを

FREResult result =FREDispatchStatusEventAsync(
    context ,
    (uint8_t*)[@"hogehoge" UTF8String], 
    (uint8_t*)[@"fugagufa" UTF8String]); 
)

とresultに代入しておいて

 if (result == FRE_OK){
  //イベント送出成功
 }else{  
 //イベント送出失敗    
 }

など、振り分け処理を行うことが出来ます。

以上、「もっとこうしたほうがいいよ!」「それ違うよ!」などありましたら、コメントかtwitterでリプ頂けると有難いです。

参考

Adobe Flash Platform * FREDispatchStatusEventAsync()

[memo] Objective-Cのタッチイベント

Category:{ Objective-C }  Tag:{, , , } Comments:{ No Comments }
Posted:{ 2010.08.01 06:24:11 }

なんとなくカジッてるObjective-Cのタッチイベント、4種類。
よく使うのでメモ。(シングルタッチ)
タッチの座標をトレースするよ。
この辺は丸覚えなきゃね!

//------------------------------------------------------------
//
// タッチ開始
//
-(void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event{
	CGPoint pos=[[touches anyObject] locationInView:self];
	NSLog(@"[BEGAN](x = %f , y = %f)",pos.x,pos.y);
}
//------------------------------------------------------------
//
// タッチムーブ
//
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
	//現在のタッチポイント
	CGPoint pos =[ [touches anyObject] locationInView:self];
	NSLog(@"[MOVE](x = %f , y = %f)",pos.x,pos.y);
}
//------------------------------------------------------------
//
// タッチ終了
//
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
	NSLog(@"[END]");
}
//------------------------------------------------------------
//
// タッチキャンセル
//
-(void)touchesCanceled:(NSSet *)touches withEvent:(UIEvent *)event{
	NSLog(@"[CANCELED]");
}

レンタルサーバー豆知識