UIImageを動的に増やす – Swift3

説明

addボタンを押すたびに二つの変数をインクリメントさせます。画像の表示位置を変えるための変数と、配列のユニークに使うための変数です。画像の表示位置を変えるための変数は80ずつインクリメントさせ、配列のユニークに使うための変数は1ずつインクリメントさせます。addボタンを押すたびに、uiimageの配列にuiimageをappendさせます。uiimageの名前を可変にするために、変数の名前を変数にします。辞書型を使って実装しました。

deleteボタンを押すたびに、配列の一番最後のオブジェクトを削除してremoveFromSuperview()で配列の数を取得して削除します。配列は0から数えるため、-1にしないとエラーになります。

環境

  • 動的
  • swift
  • swift3
  • xcode9
  • xcode
  • uiimage
  • remove

実装

 

//
//  ViewController.swift
//  Dynamically generate uiimage
//
//  Created by ryosuke-hujisawa on 2017/10/22.
//  Copyright © 2017年 ryosuke-hujisawa. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

    //追加された画像を挿入削除する配列
    var logoImages: [UIImageView] = []
    //画像の位置を定めるための変数
    var tapCount:Int = 0
    //arrayを取り出したり挿入したりする配列に使う変数
    var tapCountArray:Int = 0
    //可変変数を使うための辞書型
    var dic: Dictionary<String, Any> = [:]
    //可変変数を取り出すための変数
    let varName = ""
    //uiimageを定義する
    let image1:UIImage = UIImage(named:"FreddieMercury")!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    /*

     画像を追加する関数

     */
    @IBAction func add(_ sender: Any) {
        //80pt感覚で画像を配置する
        self.tapCount += 80
        //辞書型から取り出すためにユニークな名前を画像につける
        dic[varName] = tapCount
        print("\(dic[varName]!)")
        //ユニークな番号に画像を挿入する
        dic[varName]! = UIImageView(image:image1)
        let rect:CGRect = CGRect(x:tapCount, y:tapCount, width:80, height:80)
        (dic[varName]! as! UIView).frame = rect
        //配列に画像を挿入する
        logoImages.append(   dic[varName]! as! UIImageView  )
        print( logoImages )
        //画像をviewに挿入する
        self.view.addSubview(logoImages[ tapCountArray ]  )
        print( logoImages[ tapCountArray ] )
        print(tapCountArray)
        //配列の番号を増やしていく
        self.tapCountArray += 1
        print(tapCountArray)
    }




    @IBAction func deleteImage(_ sender: Any) {
        self.tapCount -= 80
        self.tapCountArray -= 1
        print(tapCount)
        print(tapCountArray)
        //配列の最後の値をviewから画像を削除する
        logoImages[ logoImages.count - 1 ].removeFromSuperview()
        //配列の最後の値を削除する
        logoImages.removeLast()
    }
}

 

実行

on.gif

藤沢瞭介(Ryosuke Hujisawa)
  • りょすけと申します。18歳からプログラミングをはじめ、今はフロントエンドでReactを書いたり、AIの勉強を頑張っています。off.tokyoでは、ハイテクやガジェット、それからプログラミングに関する情報まで、エンジニアに役立つ情報を日々発信しています!

未整理記事