プログラムでUIImageビューを作成する方法-Swift


107

プログラムでUIImageビューを作成しようとしています、新しいビューがあり、これを試しました

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

これは、2行目のyourviewがどうあるべきかわからないので機能しませんでした。

質問: UIImageViewをストーリーボードで行う代わりにコーディングして画面に表示するにはどうすればよいですか?


7
手元の質問とは無関係ですが、ところで、この画像が頻繁に使用する必要があるものでない場合は使用しないでくださいUIImage(named:...)。ドキュメントが言うように:「一度だけ表示される画像ファイルがあり、それがシステムのキャッシュに追加されないようにしたい場合は、代わりにを使用して画像を作成する必要がありますUIImage(contentsOfFile:...)。これにより、使い捨て画像が除外されます。システムイメージキャッシュを使用して、アプリのメモリ使用特性を改善する可能性があります。」参考までに。
Rob

回答:


255

まずUIImage画像ファイルからを作成し、次にそれからを作成しますUIImageView

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

最後にimageView、フレームを表示し、表示するためにビューを追加する必要があります。

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

39

最初にUIImageViewを作成し、次にUIImageViewに画像を追加します。

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

31

この回答はSwift 3のアップデートです。

これは、制約を制御できる場所にプログラムでイメージビューを追加する方法です。

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

上記は1行で使用できます。

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

2
次のことができますが、それはまさに「クリーン」スウィフトはありません
アレック・O

12

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
サイズとスケール?
Martian2049 2017年

1
コードの行数が多すぎることに賛成。次のように記述したほうがよいでしょうlet imageView = UIImageView(named: "Test.jpeg"); self.view.addSubview(imageView)。2行あり、変数の代わりに定数を使用しています。次に、自動拘束を使用して配置します。
角兵衛2018

10

MEnnabahさん、=宣言ステートメントで記号が欠けているコードに追加していただきありがとうございます。

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
}()

それ以外はすべて、Swift 3に最適です。


6

Swift 4.2および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
    }
}

この回答はSwift 4.2で機能します。初心者のような人にとっては、拡張機能はコードの理解に混乱をもたらす可能性があります。
midtownguru

-2

スウィフト4:

まず、UIImageViewのアウトレットを作成します

@IBOutlet var infoImage: UIImageView!

次に、UIImageViewでimageプロパティを使用します。

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

Swift 4.2では、2行目から「オプションのアンラップ時に予期せずnilが見つかりました」というエラーがスローされていました。
midtownguru
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.