0

следующий код приводит к разным выходам различных андроидов и ios. myBlob ниже {} на ios - изображение пуст даже после рисования на экране. в Android это объект со свойствами и работает нормально, но iOS изображение всегда пустое.titanium ti.paint toimage() возвращает {} после рисования на ios

Это работало раньше в версиях и версиях ios, так что я не строю это правильно? Мы используем 5.3.0 GA для титанового SDK. У меня есть модуль, проверенный для iOS в редакторе TiApp.

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); 
} 

Ti модуль Paint для iPhone

# 
# 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' 
      }); 

ответ

0

Если у вас есть что-либо в иерархии вашего представления, которое накладывает ваше изображение, например, диалоговое окно подтверждения или закрытие представления в навигационном контроллере, а не захватывает ваше изображение перед окном, закрывающее краска, всегда будет пустым. android будет продолжать работать нормально, но ios не будет, поскольку представление отсутствует в иерархии представлений.

+0

ahhhh, спасибо, что это был createAlertDialog! – user6701009

0

Ваш значение журнала консоли {} - красная сельдь.

Проверено на:

  • TiSDK 5.2.2.GA, 5.3.0.GA
  • ti.paint: 1.4.0, 1.4.1 (наша версия с исправлениями, которые были проигнорированы APPC)
  • с <run-on-main-thread>false</run-on-main-thread> в tiapp.xml

Используя пример 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. длина объекта, назначенного toImage() для увеличения по мере добавления пикселей к вашему paintView
  3. Образ ДЕЛАЕТ получить записанный в файл.
+0

Вы также обнаружите, что 'test' имеет ширину (' test.width') и высоту ('test.height') – StephenFeather

+0

Хорошо. Так что я должен делать что-то неправильно, потому что длина всегда одинаковая, а база 64 всегда пустая? – user6701009

+0

[INFO] 14162 для test.length всегда даже при рисовании на экране. изображение всегда пустое. – user6701009