[iOS] - UIView

Din의 개발노트·2021년 2월 28일
0

1. UIView

뷰를 만드는 방법과 컨텐트를 표시하는 방법, 아울렛 없이 뷰에 접근하는 방법, 이벤트 처리를 제어하는 방법, 뷰가 제공하는 시각적인 속성들에서 알아보도록 하겠습니다.

View 만드는 법

Code로 추가하는 방법

  • 코드로 뷰를 만들때는 프레임을 만들고 뷰를 만든다음 뷰를 뷰 계층에 추가해야합니다.
import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        let frame = CGRect(x: 50, y: 50, width: 100, height: 100)
        let frame2 = CGRect(x: 100, y: 100, width: 100, height: 100)
        let frame3 = CGRect(x: 150, y: 400, width: 200, height: 200)
        
        let v = UIView(frame: frame)
        let v2 = UIView(frame: frame2)
        let v3 = UIView(frame: frame3)
        
        view.addSubview(v)
        view.addSubview(v2)
        view.addSubview(v3)
        
        v.backgroundColor = UIColor.systemRed
        v2.backgroundColor = UIColor.blue
        v3.backgroundColor = UIColor.black
    }
}

2. Content Mode

  • UIImageView에 Image를 넣을때 어떤 비율로 넣을지 정해야 할 때가 있습니다. 이때 UIView.ContentMode를 이용합니다.
  • 주로 많이 사용하는 것은 aspectFit, aspectFill, scaleToFill 입니다.
import UIKit

class ViewController: UIViewController {
    
    @IBOutlet weak var imageView: UIImageView!
    @IBOutlet weak var modeLabel: UILabel!
    @IBAction func switchButton(_ sender: Any) {
        let currentMode = imageView.contentMode.rawValue
        
        let newMode = UIView.ContentMode(rawValue: currentMode + 1) ?? .scaleAspectFill
        
        imageView.contentMode = newMode
        
        updateModeLabel()
    }
    
    func updateModeLabel() {
        switch imageView.contentMode {
        case .scaleToFill:
            modeLabel.text = "Scale to fill"
        case .scaleAspectFit:
            modeLabel.text = "Aspect fit"
        case .scaleAspectFill:
            modeLabel.text = "Aspect fill"
        case .redraw:
            modeLabel.text = "Redraw"
        case .center:
            modeLabel.text = "Center"
        case .top:
            modeLabel.text = "Top"
        case .bottom:
            modeLabel.text = "Bottom"
        case .left:
            modeLabel.text = "Left"
        case .right:
            modeLabel.text = "Right"
        case .topLeft:
            modeLabel.text = "Top left"
        case .topRight:
            modeLabel.text = "Top right"
        case .bottomLeft:
            modeLabel.text = "Bottom left"
        case .bottomRight:
            modeLabel.text = "Bottom right"
        @unknown default:
            fatalError()
        }
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        imageView.layer.borderColor = UIColor.red.cgColor
        imageView.layer.borderWidth = 3
        
        updateModeLabel()
    }
}

3. Tag

  • 특정 View를 선택하는 방법입니다.
  • 코드에서 View에 접근할때는 아울렛을 연결합니다. 대부분은 이 방식을 사용하지만 tag속성을 활용하면 아울렛 연결 없이 뷰에 접근하는 것이 가능합니다.
  • 이런 방식을 ViewTagging이라고 합니다.
import UIKit

class ViewController: UIViewController {
    
    @IBAction func changeColor(_ sender: Any) {
        if let v = view.viewWithTag(10) {
            v.backgroundColor = .red
        }
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }
}

profile
iOS Develpoer

0개의 댓글