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 |
댓글