将图像添加到 UIVIew 的子类中

问题描述 投票:0回答:1

我有一个 UIViewController,其中我将 UIIView 设置为子视图以在其中保存 UIImage

class MyVIewController: UIViewController { 

  let myView = MyView()

     override func viewDidLoad() {
            super.viewDidLoad()
            myView.translatesAutoresizingMaskIntoConstraints =  false  
            myView.backgroundColor = .systemPink
           
            view.addSubview(myView)

    } 

  @objc func changeImageFunc(_ sender: Any) {

      //...extra code assigned .image (savedImage)
   myView.setImage(savedImage)

   }
class MyView: UIView {
    
     var imageView: UIImageView
    
    override init(frame: CGRect) {
     
        
        imageView = UIImageView()
        super.init(frame: frame)
        
        addSubview(imageView)

    }

    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")

    }
    
    func setImage(_ image: UIImage) {
         // Set the image for the internal UIImageView
         imageView.image = image
     }
    
}

我尝试像这样直接在

imageView
中分配
chaneImageFunc
属性

myView.imageView.image = savedImage

但也没有用。如何将我的

myView
类中保存的图像显示到
MyViewController

ios swift uiview uikit uiimage
1个回答
0
投票

看起来您从未为 UIImageView (或 MyView )建立任何自动布局约束。因此,我的猜测是,即使 UIView 的背景颜色显示,imageView 的框架也是 0 高度和 0 宽度。在运行应用程序时使用 Xcode 中的“调试视图层次结构”选项时,您应该能够看到这一点。

这是一个调整代码以包含视图和 imageView 的自动布局约束的示例,这应该允许图像正确显示:

class MyViewController: UIViewController {
    
    let myView = MyView()
    

    override func viewDidLoad() {
        super.viewDidLoad()
        super.viewDidLoad()
        myView.translatesAutoresizingMaskIntoConstraints =  false
        myView.backgroundColor = .systemPink
        
        view.addSubview(myView)
        myView.widthAnchor.constraint(equalToConstant: 50).isActive = true
        myView.heightAnchor.constraint(equalToConstant: 50).isActive = true
        myView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
        myView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
    }
    
    @IBAction @objc func changeImageFunc(_ sender: Any) {
        // just an example image
        let image = UIImage(systemName: "eraser")!
        myView.setImage(image)
    }
    
}
import UIKit

class MyView: UIView {

    var imageView: UIImageView
    
    override init(frame: CGRect) {
     
        
        imageView = UIImageView()
        imageView.translatesAutoresizingMaskIntoConstraints = false
        super.init(frame: frame)
        
        addSubview(imageView)
        imageView.widthAnchor.constraint(equalTo: self.widthAnchor).isActive = true
        imageView.heightAnchor.constraint(equalTo: self.heightAnchor).isActive = true
        imageView.centerXAnchor.constraint(equalTo: self.centerXAnchor).isActive = true
        imageView.centerYAnchor.constraint(equalTo: self.centerYAnchor).isActive = true

    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    func setImage(_ image: UIImage) {
         // Set the image for the internal UIImageView
         imageView.image = image
     }

}

结果是:

© www.soinside.com 2019 - 2024. All rights reserved.