Titanium:不能将相机与 OptionDialog 一起使用
Posted
技术标签:
【中文标题】Titanium:不能将相机与 OptionDialog 一起使用【英文标题】:Titanium: Cannot use Camera together with OptionDialog 【发布时间】:2014-03-22 12:49:25 【问题描述】:我在 Titanium 中创建了一个简单的交互,用户打开一个选项对话框,然后选择“拍照”,这会打开相机。
这里的问题是,如果您执行以下操作,应用程序会崩溃:
-
打开选项对话框并选择打开相机的“拍照”
点击取消
再次打开选项对话框并再次选择“拍照”
再次点击取消 - 应用崩溃。
我在控制台中收到以下消息:
当视图控制器不是顶部呈现的视图时关闭它 控制器。现在可能会崩溃。
尝试关闭其视图没有的模态视图控制器 目前出现。自我 = modalViewController =
CoreAnimation:警告,删除了未提交 CATransaction 的线程; 在环境中设置 CA_DEBUG_TRANSACTIONS=1 以记录回溯。
MPUSystemMediaControls] 更新当前播放的支持命令 应用。
看起来这个问题已经在 this *** 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
);
);
);
如果我不使用选项对话框直接进入相机,我完全没有问题。在没有这个问题的情况下是不可能同时使用选项对话框和相机的吗?还是我的代码出错了?
【问题讨论】:
【参考方案1】:我找到了解决办法。
诀窍是每次需要打开相机时都创建一个新的 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();
);
【讨论】:
for $.myWin.remove(dialog);行我得到一个错误:传递给函数的类型无效。如果我删除那条线,一切都会完美。以上是关于Titanium:不能将相机与 OptionDialog 一起使用的主要内容,如果未能解决你的问题,请参考以下文章
ImageView 使用存储在 Titanium.Filesystem.applicationDataDirectory 的图像显示占位符,而不是图像
如何使用 Titanium 中集成的 StartApp SDK?