Swift 3 ios:当图像出现时,UILabel 需要出现在 UIImage 之上

Posted

技术标签:

【中文标题】Swift 3 ios:当图像出现时,UILabel 需要出现在 UIImage 之上【英文标题】:Swift 3 ios: UILabel needs to appear on top of a UIImage when the Image appears 【发布时间】:2017-03-30 03:03:46 【问题描述】:

所以我试图让用户能够设计自己的虚拟名片,用户可以在 UIView 周围拖动标签,他们可以更改 UIView 的背景颜色以及 UILabel 的颜色。卡片本身由笔尖表示,用户通过 UIPickerView 选择不同的颜色选择或模板图像选择。我希望标签出现在图像顶部并被拖到视图的该部分时,但它目前没有这样做。更改 UIView 和文本的背景颜色就可以了;我还可以使用 .isHidden() 添加和删除模板图像(这是一个 PNG)。

我的问题是,当 UIImage 添加到 UIView 时,它位于 UILabel 之上。如果 UILabel 的一部分与 png 图像的一部分重叠,它会消失在它后面,我希望它出现在图像上。

nib 的代码在 userCardView.swift 中,选择器视图在 mainViewController 上,我在其中设置了 UserDefaults,它工作正常。

class userCardView: UIView 

   @IBOutlet var cardView: UIView!
   @IBOutlet weak var testLBL: UILabel!
   @IBOutlet weak var templateImage: UIImageView!

   var colorIndex = ["Black", "White", "Gray"]
   var templateIndex = ["None", "Triangle"]

   override func awakeFromNib() 
       super.awakeFromNib()

       cardView.clipToBounds = true 

       let backColorObject = UserDefaults.standard.object(forKey: "backGroundColor") as? String
       let textColorObject = UserDefaults.standard.object(forKey: "textColor") as? String
       let templateColorObject = UserDefaults.standard.object(forKey: "templateColor") as? String
       let templateImageObject = UserDefaults.standard.object(forKey: "templateImage") as? String

       for _ in templateIndex 
           if templateImageObject == templateIndex[1] 
               templateImage.isHidden = false
               templateImage.image = UIImage(named: "test_triangle.png")
               //testLBL.bringSubview(toFront: templateImage)
               templateImage.bringSubview(toFront: testLBL)
            else if templateImageObject == templateIndex[0] 
               templateImage.isHidden = true
            else 
               templateImage.isHidden = true
           
       

我对使用 swift 还是很陌生,所以任何帮助都将不胜感激,谢谢。

【问题讨论】:

【参考方案1】:

你需要请testLBL的superview把它带到前面。如果templateImage 不是testLBL 的父视图,您的代码templateImage.bringSubview(toFront: testLBL) 将不起作用,因为testLBL 不在templateImage 的视图层次结构中。

所以尽量使用testLBL的superview

<testLBL's parent view>.bringSubview(toFront: testLBL)

testLBL.parentView.bringSubview(toFront: testLBL)

希望它能解决你的问题

【讨论】:

以上是关于Swift 3 ios:当图像出现时,UILabel 需要出现在 UIImage 之上的主要内容,如果未能解决你的问题,请参考以下文章

在iOS Swift中不使用AWS SDK在Amazon S3存储桶中上传的背景图像(背景模式)

如何仅在 Swift 中访问从相机拍摄的图像,就像 iOS 中的画廊一样?

在 iOS/swift 中上传图像时如何删除裁剪选项

导航不出现 Xcode 8.1 iOS 10 Swift 3

滚动时 TableViewCell 中的 Swift 3 UISwitch 丢失状态

iOS Swift ScrollView、UITableView、滚动区域