2013-11-17 6 views
0

Окружающая среда: iOS 7.0.3 & 6.1.3, протестирован на устройствах iPhone (несколько отдельных устройств). Ti v 3.1.3 с сплавом 1.2.2.Titanium App Freezes при съемке на iOS

У меня возникли проблемы с замораживанием приложения при съемке на устройстве. Выбор фотографии из галереи работает без проблем, но при съемке приложение зависает на экране перемещения и масштабирования - по-видимому, после нажатия кнопки «Использовать». Мой код выглядит следующим образом:

$.avatar.addEventListener("click", function() { 

    var opts = { 
     cancel : 2, 
     options : ['Take a Photo', 'Select from Gallery', 'Cancel'], 
     selectedIndex : 2, 
     destructive : 0, 
     title : 'Set a Profile Photo:' 
    }; 

    var dialog = Ti.UI.createOptionDialog(opts); 
    dialog.show(); 

    dialog.addEventListener("click", function(e) { 
     switch(e.index) { 

      case(0): 
       Titanium.Media.showCamera({ 
        allowEditing : true, 
        success : function(event) { 
         $.avatar.status = "new"; 
         $.avatar.image = event.media; 
        }, 

        error : function(event) { 
         console.log(event); 
        } 
       }); 

      case(1): 
       Titanium.Media.openPhotoGallery({ 
        allowEditing : true, 
        success : function(event) { 
         $.avatar.status = "new"; 
         $.avatar.image = event.media; 
        }, 

        error : function(event) { 
         console.log(event); 
        } 
       }); 

      } 
     }); 
}); 

Желаемое поведение здесь заключается в том, что пользователь нажимает на свой аватар, который открывает меню опций. Затем они нажимают «Сфотографировать», открывая камеру, позволяя им снимать фотографию и обрезать ее. После нажатия «Использовать», эта фотография отображается в $ .avatar ImageView.

Я смог воспроизвести это на каждом устройстве, которое я тестировал, на нескольких версиях iOS. Это ошибка в Alloy или TI, или я делаю что-то явно не так? Спасибо!

ответ

0

Ответ на этот вопрос был невероятно прост, и ошеломляюще основной. Я забыл включить break; в конце каждого случая, в результате чего оператор switch запускается в обоих случаях при съемке. Добавляем это в исправленную проблему.

-1 для ошибки уровня n00b.

0

Я делаю то же самое, у меня есть фрагмент кода здесь надеюсь, что это может помочь вам:

var options = { 

         success: function(e) { 
          // var tempDate = new Date().getTime(); 
          var completeSubfix = rcvImage.subfix + APP.uniqueIdCounter(sectionId); 
          var noDashPlatformId = Titanium.Platform.id.replace(/-/g,""); 
          var imageName = result[0].parentAccount + "-" +result[0].id_user + "-" + noDashPlatformId + "-" + completeSubfix; 
          urls[rcvImage.id] = Ti.Filesystem.applicationDataDirectory+ imageName+ '.png'; 

          var tmpPhoto = Ti.Filesystem.getFile(Ti.Filesystem.applicationDataDirectory, imageName + '.png'); 
          tmpPhoto.write(e.media); 

          var useHeight = true; 

          if(OS_ANDROID){ 
           //If in portrait, we use this variable to invert the cropping. 
           useHeight = e.cropRect.height < e.cropRect.width ? true : false; 
          } 

          //Creating thumbnail for both OS 
          var thumbnailtmp = e.media.imageAsThumbnail(180, 1,2); 


          if(OS_ANDROID){ 
           //Making it a rectangle again so it wont get streched on the image view 
           thumbnailtmp = thumbnailtmp.imageAsCropped({ 
            width: useHeight ? 180 : 122, 
            height: useHeight ? 122 : 180, 
            x:0, 
            y:0 
           }); 
          } 


//          
          var thumbnail = Ti.UI.createImageView({ 
           image: thumbnailtmp 
          }); 

          var tmpPhoto = Ti.Filesystem.getFile(Ti.Filesystem.applicationDataDirectory, imageName + '_thum.png'); 
          tmpPhoto.write(thumbnail.image); 

          rcvImage.image = tmpPhoto.nativePath; 
          //rcvImage.image = APP.getThumbnailMedium(urls[rcvImage.id] ,"medium"); 
          if(OS_IOS){ 
           rcvImage.children[0].opacity = 0.6; 
           rcvImage.children[1].text = completeSubfix; 
          } 
          else{ 
           rcvImage.parent.children[1].opacity = 0.6; 
           rcvImage.parent.children[2].text = completeSubfix;       
          } 
          _callback(rcvImage); 

         }, 

         cancel:function() { 
         // called when user cancels taking a picture 
         }, 
         error:function(error) { 
          // called when there's an error 
          var a = Titanium.UI.createAlertDialog({title:'Camera'}); 
          if (error.code == Titanium.Media.NO_CAMERA) { 
           a.setMessage('Please run this test on device'); 
          } else { 
           a.setMessage('Unexpected error: ' + error.code); 
          } 
          a.show(); 
         }, 

      }; 


       Ti.Media.showCamera(options); 
Смежные вопросы