Jak programowo utworzyć widok UIImage - Swift


107

Próbuję programowo utworzyć widok UIImage, mam nowy widok i próbowałem to zrobić

let imageName = "yourImage.png"
yourview.backgroundColor = UIColor.colorWithPatternImage(UIImage(named:imageName))

to nie zadziałało, ponieważ nie wiem, jakie powinno być twoje zdanie w drugiej linii.

Pytanie: Jak sprawić, aby UIImageView pojawił się na ekranie, kodując go zamiast robić to w serii ujęć


7
Nie ma związku z twoim pytaniem, ale, przy okazji, ostrzeż się, jeśli ten obraz nie jest tym, którego będziesz musiał często używać, możesz nie chcieć go używać UIImage(named:...). Jak mówią dokumenty: „Jeśli masz plik obrazu, który zostanie wyświetlony tylko raz i chcesz mieć pewność, że nie zostanie on dodany do pamięci podręcznej systemu, powinieneś zamiast tego utworzyć obraz za pomocą UIImage(contentsOfFile:...). Dzięki temu obraz jednorazowego użytku nie zostanie wyświetlony pamięci podręcznej obrazu systemu, co może poprawić charakterystykę wykorzystania pamięci przez aplikację ”. Tylko do Twojej wiadomości.
Rob

Odpowiedzi:


255

Najpierw tworzysz UIImagez pliku obrazu, a następnie tworzysz UIImageViewz tego:

let imageName = "yourImage.png"
let image = UIImage(named: imageName)
let imageView = UIImageView(image: image!)

Na koniec musisz podać imageViewramkę i dodać ją do swojego widoku, aby była widoczna:

imageView.frame = CGRect(x: 0, y: 0, width: 100, height: 200)
view.addSubview(imageView)

39

Najpierw utwórz UIImageView, a następnie dodaj obraz w UIImageView.

    var imageView : UIImageView
    imageView  = UIImageView(frame:CGRectMake(10, 50, 100, 300));
    imageView.image = UIImage(named:"image.jpg")
    self.view.addSubview(imageView)

32

Ta odpowiedź to aktualizacja do Swift 3.

W ten sposób można programowo dodać widok obrazu, w którym można kontrolować ograniczenia.

Class ViewController: UIViewController {

    let someImageView: UIImageView = {
       let theImageView = UIImageView()
       theImageView.image = UIImage(named: "yourImage.png")
       theImageView.translatesAutoresizingMaskIntoConstraints = false //You need to call this property so the image is added to your view
       return theImageView
    }()

    override func viewDidLoad() {
       super.viewDidLoad()

       view.addSubview(someImageView) //This add it the view controller without constraints
       someImageViewConstraints() //This function is outside the viewDidLoad function that controls the constraints
    }

    // do not forget the `.isActive = true` after every constraint
    func someImageViewConstraints() {
        someImageView.widthAnchor.constraint(equalToConstant: 180).isActive = true
        someImageView.heightAnchor.constraint(equalToConstant: 180).isActive = true
        someImageView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
        someImageView.centerYAnchor.constraint(equalTo: view.centerYAnchor, constant: 28).isActive = true
    }

}

16

Możesz użyć powyżej w jednej linii.

  let imageView = UIImageView(image: UIImage(named: "yourImage.png")!)

2
Można, ale to nie jest dokładnie „czysty” Swift
Alec O

12

W Swift 3.0:

var imageView : UIImageView
    imageView  = UIImageView(frame:CGRect(x:10, y:50, width:100, height:300));
    imageView.image = UIImage(named:"Test.jpeg")
    self.view.addSubview(imageView)

1
rozmiar i skala?
Martian2049,

1
Niedoceniany przez zbyt wiele wierszy kodu. Lepiej byłoby napisać to tak: let imageView = UIImageView(named: "Test.jpeg"); self.view.addSubview(imageView). 2 wiersze i zamiast zmiennej używasz stałej. Następnie użyj Autoconstraint, aby go umieścić.
kakubei

10

Dzięki, MEnnabah, tylko po to, aby dodać do swojego kodu, gdzie brakuje =znaku w oświadczeniu deklaracji:

let someImageView: UIImageView = {
   let theImageView = UIImageView()
   theImageView.image = UIImage(named: "yourImage.png")
   theImageView.translatesAutoresizingMaskIntoConstraints = false //You need to call this property so the image is added to your view
   return theImageView
}()

Wszystko inne jest idealne dla Swift 3.


6

W Swift 4.2 i Xcode 10.1

//Create image view simply like this.
let imgView = UIImageView()
imgView.frame = CGRect(x: 200, y: 200, width: 200, height: 200)
imgView.image = UIImage(named: "yourimagename")//Assign image to ImageView
imgView.imgViewCorners()
view.addSubview(imgView)//Add image to our view

//Add image view properties like this(This is one of the way to add properties).  
extension UIImageView {
    //If you want only round corners
    func imgViewCorners() {
        layer.cornerRadius = 10
        layer.borderWidth = 1.0
        layer.masksToBounds = true
    }
}

Ta odpowiedź działa dla Swift 4.2. Dla kogoś takiego jak nowicjusz rozszerzenie może wprowadzić zamieszanie w zrozumieniu kodu, mimo że nadal jest przyjemne.
midtownguru

-2

Swift 4:

Najpierw utwórz gniazdko dla swojego UIImageView

@IBOutlet var infoImage: UIImageView!

Następnie użyj właściwości image w UIImageView

infoImage.image = UIImage(named: "icons8-info-white")

W szybkim 4.2 "nieoczekiwanie znaleziono zero podczas rozpakowywania opcjonalnego" błąd został wyrzucony z drugiej linii.
midtownguru
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.