在使用ios绘制后,钛ti.paint toimage()正在返回{}

时间:2016-08-19 14:17:13

标签: titanium appcelerator titanium-alloy appcelerator-titanium appcelerator-alloy

以下代码导致不同的输出不同的android和ios。下面的myBlob在ios上是{} - 即使在屏幕上绘图后图像也是空的。在Android中它是一个具有属性的对象并且工作正常,但iOS图像始终为空白。

这在过去的ios版本和版本之前有效,所以我没有正确构建它吗?我们使用5.3.0 GA for titanium SDK。我在TiApp编辑器中检查了iOS模块。

function uploadImage(signed) {
    if (signed) {
        var myBlob;
        try {  
            myBlob = $.viewPaint.toImage();
            var myImage = Titanium.Utils.base64encode(myBlob).toString(); 
            $.nextAction.image = myImage;
        } catch (ex) {
           Titanium.API.error('FAILURE HANDLING SIGNATURE DOCUMENT: ' + ex);
           return;
        }
    }

    $.nextAction.perform(Alloy.Globals.requests);
}

iPhone的Ti Paint模块

#
# this is your module manifest and used by Titanium
# during compilation, packaging, distribution, etc.
#
version: 1.4.0
apiversion: 2
architectures: armv7 i386 x86_64 arm64
description: Provides a paint surface user interface view.
author: Jeff Haynie 
license: Appcelerator Commercial License 
copyright: Copyright (c) 2010-2014 by Appcelerator, Inc. 


# these should not be edited
name: paint
moduleid: ti.paint
guid: 43f13063-d426-4e9c-8a7a-72dc5e4aec57
platform: iphone
minsdk: 3.4.1.GA 

将执行添加到操作对象的先前代码

                var route = action.action.uri;
                Ti.API.info('route = ' + route);
                newAction.execute = function(requestManager) {
                    Titanium.App.fireEvent('app:index:view:requested', 
                        controller : 'signscreen',
                        uri : route
                    });
                };   

触发事件打开的代码:

            Titanium.App.fireEvent('app:index:view:requested', {
                controller : 'signature'
            });

2 个答案:

答案 0 :(得分:0)

您的控制台日志值{}是红色鲱鱼。

经过测试:

  • TiSDK 5.2.2.GA,5.3.0.GA
  • ti.paint:1.4.0,1.4.1(我们的版本包含已被appc忽略的修补程序)
  • 使用tiapp.xml中的<run-on-main-thread>false</run-on-main-thread>

使用模块中的示例app.js并添加以下内容:

var buttonSave = Ti.UI.createButton({ bottom:100, right:10, width:75, height:30,   title:'Save' });
buttonSave.addEventListener('click', function(e){
  var test = paintView.toImage();
  console.log(test.length); 
  console.log(paintView.toImage()); 
  var imageFile = Titanium.Filesystem.getFile(Titanium.Filesystem.applicationDataDirectory,"testing.png");
  imageFile.write(paintView.toImage());
});
win.add(buttonSave)

你会发现

  1. 记录的值始终为{}
  2. 当您向paintView添加像素时,分配给Image()的对象的长度会增加。
  3. 图像将被写入文件。

答案 1 :(得分:0)

如果您的视图层次结构中有任何内容覆盖您的绘图视图,例如确认对话框或关闭导航控制器中的视图,而不是在窗口关闭之前抓取您的绘图视图,则paintview将始终返回空白。 android将继续正常工作,但ios不会因为视图层次结构中不存在视图。