Egret社区
1银子
我现在在开发一款游戏的聊天功能,需要访问ios照片库,我使用的是native通信的机制来获取照片,但是遇到了一个问题,就是每次打开ios照片库后,都会自动跳到并打开LoadingView,具体日志如下(日志是在打开照片库后打印的)
2017-04-12 15:11:13.640377+0800 TPGame[4183:1584743] D/Context:dispose
2017-04-12 15:11:13.643672+0800 TPGame[4183:1584743] D/Updater:removeUpdate 1
2017-04-12 15:11:13.666137+0800 TPGame[4183:1584743] D/Updater:addUpdate

ios代码如图所示,我使用的引擎和support都是4.0.3,现在项目赶进度,催的急,麻烦尽快帮忙解决下,感谢了!

核心objective-c代码

核心objective-c代码

最佳答案

查看完整内容

base64传值确实报错了,我们会分析一下。我先实现了一种解决方案:https://pan.baidu.com/s/1bpu2t8V
分享到 :
0 人收藏

13 个回复

倒序浏览
LijianFKS  官方团队 | 2017-4-12 15:30:59

base64传值确实报错了,我们会分析一下。我先实现了一种解决方案:https://pan.baidu.com/s/1bpu2t8V
LijianFKS  官方团队 | 2017-4-12 15:36:50
在viewWillDisappear和viewDidAppear方法中加一个判断,如果调用了UIImagePickerController相关的方法就不进行destroy和create,改为pause和resume。
goback2008  登堂入室 | 2017-4-12 18:32:12
LijianFKS 发表于 2017-4-12 15:36
在viewWillDisappear和viewDidAppear方法中加一个判断,如果调用了UIImagePickerController相关的方法就不 ...

感谢,已经解决了,再请问下,ios下面获取到UIImage这个对象后,怎么在egret里面显示出来,需要把它转成base64吗?然后再用RES.getResByUrl进行加载?
LijianFKS  官方团队 | 2017-4-12 19:48:28
goback2008 发表于 2017-4-12 18:32
感谢,已经解决了,再请问下,ios下面获取到UIImage这个对象后,怎么在egret里面显示出来,需要把它转成b ...

[mw_shl_code=applescript,false]引擎为从base64字符串或者ArrayBuffer数据创建贴图提供了便利方法。示例代码如下:

Base64的情况

    //base64的字符串,不需要添加形如"data:image/png;base64,"的头  
    let base64String = "iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAAC";   
    let bitmapData = egret.BitmapData.create("base64", base64String);  
    let bitmap = new egret.Bitmap(bitmapData);
ArrayBuffer的情况

    let arrayBuffer = data;  
    let bitmapData = egret.BitmapData.create("arraybuffer", arrayBuffer);  
    let bitmap = new egret.Bitmap(bitmapData);  
上述代码同样支持runtime环境[/mw_shl_code]
goback2008  登堂入室 | 2017-4-12 20:50:14
本帖最后由 goback2008 于 2017-4-12 20:55 编辑
LijianFKS 发表于 2017-4-12 19:48
[mw_shl_code=applescript,false]引擎为从base64字符串或者ArrayBuffer数据创建贴图提供了便利方法。示例 ...

您好,我试了一下您说的方法,好像有问题,BitmapData下面没有create这个方法,还有我现在的问题不是在渲染上,而是怎么把objective-c的UIImage以正确的形式传到TS里面,我试过,发现还是不行,我是先把UIImage转换成Base64(strRet),然后再调用callEgretInterface: @"runtimeInterface" value: strRet]; 照片大一点时,strRet长度过长,直接报错了,找了个小一点的图片,能把值传到ts,但是也报错I/FileToolIOS:Get data from file(/var/mobile/Containers/Data/Application/1BB4A4F1-5487-413E-A0D3-8864CE0689B2/Documents/local/game) failed!  我现在很急,麻烦您们帮我看一下
LijianFKS  官方团队 | 2017-4-13 09:47:12
goback2008 发表于 2017-4-12 20:50
您好,我试了一下您说的方法,好像有问题,BitmapData下面没有create这个方法,还有我现在的问题不是在渲 ...

1. 我这里用4.0.3测试bitmapData下是存在create方法的,请确认一下引擎版本
2. 请提供一个复现这个问题demo
goback2008  登堂入室 | 2017-4-13 13:12:55
LijianFKS 发表于 2017-4-13 09:47
1. 我这里用4.0.3测试bitmapData下是存在create方法的,请确认一下引擎版本
2. 请提供一个复现这个问题de ...

您好,我已经准备好了demo,麻烦您帮忙解决一下,引擎4.0.3,support用的gethub上最新版本,ios下面打开照片库并选择照片我已实现,并将UIImage转成了base64传到了ts,但是ts里面创建Bitmap时报错了,您帮忙看下,到底怎样才能选择照片库的照片后在egret里面显示出来,由于ios工程过大超过了60M,所以只上传了ts工程和ios下的
ViewController.h和ViewController.mm,您构建后将这两个文件替换一下,谢谢了

demo.zip

1.05 MB, 下载次数: 7, 下载积分: 银子 -1

包含ts工程和ios的ViewController.h、ViewController.mm

LijianFKS  官方团队 | 2017-4-13 13:35:07
goback2008 发表于 2017-4-13 13:12
您好,我已经准备好了demo,麻烦您帮忙解决一下,引擎4.0.3,support用的gethub上最新版本,ios下面打开 ...

您的这个demo没有调用到runtimeInterface,请问该如何操作?
goback2008  登堂入室 | 2017-4-13 13:36:53
本帖最后由 goback2008 于 2017-4-13 13:58 编辑
LijianFKS 发表于 2017-4-13 13:35
您的这个demo没有调用到runtimeInterface,请问该如何操作?

有调用的啊,点击那个按钮就可以了,但是必须在打包ios后才行,因为访问照片库是在native模式下,private initNative(): void {        if(egret.Capabilities.runtimeType != egret.RuntimeType.NATIVE)
            return;

        var self = this;
        egret.ExternalInterface.addCallback("runtimeInterface",function(infoStr: string) {
                        self.messageFromNative(infoStr);
        });
    }
web下面是调用不了runtimeInterface的,plist记得添加一下权限,如照片所示

plist

plist
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|京网文[2014]0791-191号|京ICP证150115号|Egret社区 ( 京ICP备14025619号 )

Powered by Discuz! X3.4 © 2001-2019 Comsenz Inc.

返回顶部