环境:iOS 7.0.3& 6.1.3,在iPhone设备上测试(几个独立的设备)。 Ti v 3.1.3与合金1.2.2。
我在设备上拍照时我的应用程序冻结了。从图库中选择照片可以毫无问题地工作,但在拍照时,应用程序会在移动和缩放屏幕上冻结 - 看似在点击“使用”按钮后。我的代码如下:
$.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版本上重现这一点。这是合金或TI中的错误,还是我在这里做了一些明显的错误? 谢谢!
答案 0 :(得分: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);
答案 1 :(得分:0)
这个问题的答案非常简单,基本上令人尴尬。我忘了在每个案例结尾处包含break;
,导致switch语句在拍摄照片时贯穿两种情况。添加它来解决问题。
-1表示n00b级错误。