titanium ti.paint toimage() 在 ios 上绘图后返回 {}

titanium ti.paint toimage() is returning {} after drawing on ios

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

这在过去的 ios 版本和构建中是有效的,所以我没有正确构建它吗?我们正在为 Titanium SDK 使用 5.3.0 GA。我在 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 油漆模块
#
# 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'
            });

您的 {} 控制台日志值是一个误会。

测试于:

  • 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. 图像确实写入文件。

如果您的视图层次结构中有任何内容覆盖您的绘图视图,例如确认对话框或在导航控制器中关闭视图,并且在 window 关闭绘图视图之前未抓取您的绘图视图,将始终 return 空。 android 将继续正常工作,但 ios 不会,因为视图不存在于视图层次结构中。