본문 바로가기
iOS/iOS

ViewController present (VC1위에 VC2 present)

by 패쓰킴 2022. 7. 5.
728x90

만약, 현재 화면에 다른 ViewController를 present 하고 싶고

아래와 같이 새로운 ViewController가 보이더라도 현재 화면이 투명하게 보이는 화면을 만들고 싶다면!

 

1) 방법 1

현재 화면을 캡처하여 새로운 화면에 이미지로 세팅 해주는 방식

 

imgView와 coverView의 오토레이아웃은 화면 전체(safeArea까지 덮는 superView)로 잡고

// 현재 화면을 캡처하는 기능을 extension으로 추가
extension UIView {
  func viewToImage() -> UIImage {
    let renderer = UIGraphicsImageRenderer(bounds: bounds)
      return renderer.image(actions: { rendererContext in
        layer.render(in: rendererContext.cgContext)
    })
  }
}
// New ViewController
class NewViewController: UIViewController {
  @IBOutlet weak var imgView: UIImageView! // 현재화면 이미지 반영 imageView
  @IBOutlet weak var coverView: UIView! // 투명 검정 화면
  var captureImg: UIImage? // 캡처한 이미지
  
  override func viewDidLoad() {
    imgView.image = captureImg
    coverView.backgroundColor = UIColor.black
    coverView.alpha = 0.7
  }
}
// Current ViewController
class CurrentViewController: UIViewController {
  @IBAction func showNewVC() {
    guard let newVC = self.storyboard?.instantiateViewController(withIdentifier: "newVC") as? NewViewController else { return }
    newVC.captureImg = self.view.viewToImage()
    newVC.modalPresentationStyle = .fullScreen
    self.present(newVC, animated: false, completion: nil)
  }
}

 

2) 방법 2

화면을 그대로 투명하게 하여 현재 화면이 비치도록 보여주는 방식

 

coverView의 오토레이아웃은 화면 전체(safeArea까지 덮는 superView)로 잡고

superView의 배경색은 clear로 설정

// New ViewController
class NewViewController: UIViewController {
  @IBOutlet weak var coverView: UIView! // 투명 검정 화면
  
  override func viewDidLoad() {
    coverView.backgroundColor = UIColor.black
    coverView.alpha = 0.7
  }
}
// Current ViewController
class CurrentViewController: UIViewController {
  @IBAction func showNewVC() {
    guard let newVC = self.storyboard?.instantiateViewController(withIdentifier: "newVC") as? NewViewController else { return }
    newVC.modalPresentationStyle = .overCurrentContext
    self.present(newVC, animated: false, completion: nil)
  }
}
728x90

'iOS > iOS' 카테고리의 다른 글

PCH 파일  (0) 2022.07.29
웹 페이지의 자바스크립트 통신(JS <-> Swift)  (0) 2022.07.13
Date  (0) 2022.06.10
버전업 앱스토어 배포  (0) 2022.06.10
화면 간 데이터 전달  (0) 2022.06.10

댓글