我正面临审讯,我希望你能帮助我找到答案。
我正在连续选择X项。 我已经为连续1个项目选择做了一个自定义警报,看起来像这样。
以下是我如何调用警报
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let myAlert = storyboard.instantiateViewController(withIdentifier: "uploadAlert") as! AlertUploadViewController
myAlert.modalPresentationStyle = UIModalPresentationStyle.overCurrentContext
myAlert.modalTransitionStyle = UIModalTransitionStyle.crossDissolve
let image = self.interventionsSelected[0].picture
myAlert.initAlert(image: image!)
request.view.present(myAlert, animated: true, completion: nil)
如您所见,我只选择了第一张图片。现在,我想拍摄所有选定的图像。
我的问题在于我想要链接所有警报并在它们之间进行平滑过渡。如何链接解除警报和下一个警报?
我应该制作一系列所有警报并抓住解雇权吗?
我是否必须使用闭包并链接所有闭包?
我不确定如何以最佳方式做到这一点。
答案 0 :(得分:1)
你需要维护你的alertcontroller的委托方法
制定协议
protocol AlertProtocol: class {
func showNextAlert()
}
现在将主视图控制器指定为其委托
在你的alertviewcotntroller中:
var delegate: AlertProtocol?
当您单击警报控制器中的按钮以执行某些操作并关闭警报时,在其完成处理程序中
self.dismiss(animated: true) {
self.delegate.showNextAlert()
}
这是您当前的警报关闭,并且维护窗口的持续时间,并在流程中使用新数据打开另一个警报
答案 1 :(得分:1)
我不会同时使用多个警报,因为在视觉上看起来会发生的情况是你的黑暗背景会更暗,有更多警报。当解雇他们每个人时,你的背景会更亮......
在内部支持多个图像看起来相当不错,但如果您稍后选择其中一些内部视图将完全不同(一个用于图像,另一个用于您可以想到的任何图像),它可能无法扩展。
我能想到的最佳方案是使用容器视图创建此叠加视图控制器。因此,该视图能够显示视图控制器,并能够在内部为它们设置动画。您使用它的界面如下所示:
let container = MyContainerViewController.instantiateFromStoryboard()
container.injectViewControllers([
ShowImageViewController.instantiateFromStoryboard(image: image[0], delegate: self),
ShowImageViewController.instantiateFromStoryboard(image: image[1], delegate: self),
ShowSomethingElseViewController.instantiateFromStoryboard(data: data[0], delegate: self)
])
present(container...
那么我想你会有一个委托方法,比如
func embeddedController(_ sender: UIViewController, shouldProceedWithData outputData: Any?) {
if container.canGoForward() {
container.forward(animated: true)
} else {
container.dismiss(...
}
}