我在Titanium中创建了一个简单的交互,用户打开一个选项对话框,然后选择"拍照",打开相机。
这里的问题是,如果您执行以下操作,应用程序会崩溃:
我在控制台中收到以下消息:
当视图控制器不是顶部呈现视图时,将其解除 控制器。现在可能会崩溃。
尝试关闭其视图没有的模态视图控制器 目前出现。 self = modalViewController =
CoreAnimation:警告,删除线程与未提交的CATransaction; 在环境中设置CA_DEBUG_TRANSACTIONS = 1以记录回溯。
MPUSystemMediaControls]更新现在正在播放的支持命令 应用
看来这个问题已在this Stackoverflow Question中的Objective C中的本机iOS开发中修复,但我如何使用Titanium修复此问题?
这是我的代码
$.imageView.addEventListener("click", function (e) {
$.imageDialog.cancel = 1;
$.imageDialog.show();
$.imageDialog.addEventListener("click", function (event) {
if (event.index === 0) {
$.imageDialog.hide();
Titanium.Media.showCamera({
success: function (e) {
if (e.mediaType === Ti.Media.MEDIA_TYPE_PHOTO) {
$.beerImage.image = e.media;
theImage = e.media;
$.cameraImage.opacity = 0.5;
}
},
cancel: function (e) { console.log('Action was cancelled'); },
error: function (e) { console.log('An error happened'); },
allowEditing: true,
mediaTypes: [Titanium.Media.MEDIA_TYPE_PHOTO],
videoQuality: Titanium.Media.QUALITY_HIGH
});
}
});
});
如果我不使用选项对话框并直接进入相机,我完全没有问题。如果没有此问题,是否无法同时使用选项对话框和相机?或者在我的代码中犯了错误?
答案 0 :(得分:0)
我为此找到了解决方法。
诀窍是每次需要打开相机时创建一个新的OptionDialog。在下面的代码中,单击按钮打开相机时会创建选项对话框。因此,会创建一个新的OptionDialog,将事件列表添加到它,然后打开它。
$.imageView.addEventListener("click", function (e) {
var opts = {
cancel: 2,
options: ['Take Photo', 'Choose from gallery', 'Cancel'],
destructive: 0,
title: 'Choose'
};
var dialog = Ti.UI.createOptionDialog(opts);
dialog.addEventListener("click", function (event) {
if (event.index === 0) {
Titanium.Media.showCamera({
success: function () { ... },
cancel: function () { ... },
error: function () { ... },
allowEditing: true,
mediaTypes: [Titanium.Media.MEDIA_TYPE_PHOTO],
videoQuality: Titanium.Media.QUALITY_HIGH
});
}
$.addBeerWin.remove(dialog);
});
dialog.show();
});