在具有透明背景的 Alert ViewController 中心添加图像

Posted

技术标签:

【中文标题】在具有透明背景的 Alert ViewController 中心添加图像【英文标题】:Add image on center of Alert ViewController with transparent background 【发布时间】:2017-03-23 10:18:42 【问题描述】:

如何在警报 viewController 的中心显示图像,警报 viewController 的背景是透明的。 我写了以下代码。

let image = UIImage(named: "ic_no_data")
        let imageView = UIImageView(frame: CGRectMake(220, 10, 40, 40)
        let alertMessage = UIAlertController(title: "image", message: "", preferredStyle: .Alert)

        let backView = alertMessage.view.subviews.last?.subviews.last
        backView?.layer.cornerRadius = 10.0
        backView?.backgroundColor = UIColor.lightGrayColor()

        alertMessage.view.addSubview(imageView)

        let action = UIAlertAction(title:"", style: .Cancel, handler: nil)
        action.setValue(image, forKey: "image")
        alertMessage .addAction(action)
        self.presentViewController(alertMessage, animated: true, completion: nil)

看起来像这样。

请帮我解决这个问题,谢谢大家。

【问题讨论】:

【参考方案1】:

UIAlertController 不支持视图层次结构中的此类更改,您最好使用模仿 UIAlertController 行为的自定义可扩展组件。 UIAlertController 的问题在于你不知道 Apple 将如何在下一个 ios 版本中更改其视图层次结构。而且每次他们更改某些内容时,您都必须为特定版本的 iOS 添加代码,从可维护性的角度来看,这确实很糟糕。

例如 CustomIOSAlertView:https://github.com/wimagguc/ios-custom-alertview。

【讨论】:

【参考方案2】:

您可以将 imageView 的引用存储在 alertMessage 中,并且在完成当前 viewController 后,您将获得警报视图的确切大小,因此您可以根据当前警报 rect 调整图像。

试试这个代码在 swift3 中:

 self.present(alertMessage, animated: true, completion: 
            var frame = self.alertMessage.view.frame
            frame.origin = CGPoint(x: 0, y: 0) // add your location
            self.imageView.frame = frame
        )

【讨论】:

它说“viewController 没有成员存在”。 @KushalShrestha 代码在 swift 3 中,我更新了答案

以上是关于在具有透明背景的 Alert ViewController 中心添加图像的主要内容,如果未能解决你的问题,请参考以下文章

具有透明背景和不透明前景的 iOS 模态 ViewController

java TrayIcon使用具有透明背景的图像

EAGLView 具有透明背景?

具有透明背景的 UITableView 具有纯黑色边框

具有透明背景的 iOS 应用程序图标在设备上显示黑色背景

如何在pygame中制作具有透明背景的表面