AIR FOR IOS中加载外部图片

很多朋友在使用flash技术开发ios应用的时候都会遇到加载外部图片资源的问题。举个简单的例子,假如我们要实现换皮肤的功能就会使用到加载外部图片资源。看到不少朋友在网上提问,说AIR在IOS中运行的时候就无法进行资源加载,再次特意写了一个简单的DEMO为大家简单介绍一下。

为了确保我们能够简单而且直观的看到效果,我的demo中仅仅是使用了一个loader对象来进行显示。那么如何证明我们确实可以正常无误的加载资源呢?这里我采用了两种方法,首先我在本地资源中放入了一张jpg格式的图片。其次为了进行测试,我在我的macbook中架设了一个Apache运行环境,并通过局域网Ip地址访问服务器内资源。

先简单来看一下代码:

package
{
	import flash.display.Loader;
	import flash.display.Sprite;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.net.URLRequest;

public class loadtest extends Sprite
{

	private var loader:Loader;

	public function loadtest()
	{
		super();

		// 支持 autoOrient
		stage.align = StageAlign.TOP_LEFT;
		stage.scaleMode = StageScaleMode.NO_SCALE;
		//
		this.loader = new Loader();
		this.loader.contentLoaderInfo.addEventListener(Event.COMPLETE,ok);

		var a:Sprite = new Sprite();
		a.graphics.beginFill(0x00ff00);
		a.graphics.drawRect(0,0,100,100);
		a.graphics.endFill();
		a.addEventListener(MouseEvent.CLICK,dian);
		this.addChild( a );

		var t:Sprite = new Sprite();
		t.graphics.beginFill(0x000000);
		t.graphics.drawRect(0,0,100,100);
		t.graphics.endFill();
		t.addEventListener(MouseEvent.CLICK,tt);
		t.y = 150;
		this.addChild(t);
	}
	private function tt(evt:MouseEvent):void
	{
		this.loader.load( new URLRequest("image.jpg") );
	}
	private function dian(evt:MouseEvent):void
	{
		this.loader.load( new URLRequest("http://192.168.0.102/image.jpg") );
	}
	private function ok(evt:Event):void
	{
		this.loader.x = this.loader.y = 200;
		this.addChild( this.loader );
	}
}

}

如果利用原来的flash技术我们可以非常确信的加载到我们想要的资源,在IOS上面,这段代码同样有效。下面是测试后的结果截图:

点击查看原图

在IOS中运行的代码和PC中是完全相同的。当我们使用网络加载的时候,我们的image会被加载到内存当中,但是当我们使用本地图片的时候,我们可以默认理解为图片就存放到ios系统的硬盘中,如果程序部队图片进行加载,那么我们也就不会因为图片资源占用更多的内存。