๐ก [iOS/Swift] ๋ชจ์๋ฆฌ๊ฐ ๋ฅ๊ทผ, ๊ทธ๋ฆผ์๊ฐ ์ ์ฉ๋ ํ์ ๋ทฐ ๊ตฌํํ๊ธฐ
Zerobin ์ฑ์์ ์ผ์ชฝ ํ๋ฉด์ ๋ฆฌ๋ทฐ์์ฑ์ ์์น์คํฌํ๋ฅผ ๋๋ฅด๋ ํ๋ฉด์ด๊ณ , ์ค๋ฅธ์ชฝ ํ๋ฉด์ ์์น ์คํฌํ์ ๋ํ ์ค๋ช ์ ๋ํ๋ด๋ ํ๋ฉด์ ๋๋ค.
์ฑ๊ฐ๋ฐ์ ํ๋ฉด์ ์ผ์ชฝํ๋ฉด์ โ ๋ฒํผ์ ๋๋ฅด๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํ์ ๋ทฐ๊ฐ ๋ํ๋๋๋ก ๊ฐ๋ฐํด์ผ ํ๊ณ , ์ด ๊ณผ์ ์์ ์๊ฒผ๋ ๋ฌธ์ ๋ค์ ๋ค๋ค๋ณผ๊ฒ์! ์ค๋ช ์ ์ํด์ ์ผ์ชฝํ๋ฉด์ MainVC, โ ๋ฒํผ์ infoButton, ์ค๋ฅธ์ชฝ ํ๋ฉด์ ๋ํ๋ ํ์ ํ๋ฉด์ PopupVC ๋ผ๊ณ ์ง์นญํ ๊ฒ์.
๋จผ์ , MainVC ์์ PopupVC ๋ฅผ ๋์ฐ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํ๊ณ ํ์ ๋ทฐ์์ View ์ ๋ชจ์๋ฆฌ๋ฅผ ๋ฅ๊ธ๊ฒ ์ฒ๋ฆฌํ๊ณ , ๊ทธ๋ฆผ์๋ฅผ ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋๋ ์ ์์ฑํ ๊ฒ์.
โ๏ธ ๋ฉ์ธํ๋ฉด์์ ํ์ ๋ทฐ๋ฅผ ๋์ฐ๋ ๋ฐฉ๋ฒ
1. ๋จผ์ ๋ ํ๋ฉด์ ์คํ ๋ฆฌ๋ณด๋๋ก ๊ตฌํํฉ๋๋ค.
MainVC ๋ ํธํ๋๋ก ๊ตฌํํ์๋ฉด ๋์ง๋ง, ํ์ ๋ทฐ๋ฅผ ๋์ฐ๊ธฐ ์ํ ๋ฒํผ ํ๋๋ ์์ด์ผ๊ฒ ์ฃ !?
PopupVC ๋ ๊ฐ์ด๋ฐ์ infoView ๋ฅผ ๋๊ณ , ๋ค์ ๋ฐฐ๊ฒฝ์ ์ด๋์ด ์์ผ๋ก ์ง์ ํ์ต๋๋ค.
- MainVC = Review Stamp View Controller
- PopupVC = Stamp Info View Controller
2. MainVC ์์ infoButton ์ด ํด๋ฆญ๋์์ ๋ PopupVC ๋ฅผ overFullScreen ์ผ๋ก ๋์์ค๋๋ค.
modalPresentationStyle ์ overFullScreen ์ผ๋ก ์ค์ ํ๊ณ , present ํจ์๋ฅผ ํตํด ๋ทฐ๋ฅผ ๋์์ค๋ค๋ ๋ป์ ๋๋ค.
.overFullScreen ์ผ๋ก ์ค์ ํ ์ด์ ๋ MainVC ํ๋ฉด์ ์ ์งํ๊ณ ๊ทธ ์์ PopupVC ๋ฅผ ๋์์ฃผ๊ธฐ ์ํด์์ ๋๋ค.
.fullScreen ์ผ๋ก ์ค์ ํ๊ฒ ๋๋ค๋ฉด, MainVC ๋ ๋ทฐ๊ณ์ธต์์ ์ฌ๋ผ์ง๊ณ , PopupVC ๋ง ๋ํ๋๊ฒ ๋ฉ๋๋ค..
๐ ์ฉ์ด์ ๋ฆฌ!
modalPresentationStyle :: View Controller ๊ฐ modal ํ์์ผ๋ก ๋์์ง ๋์ ์คํ์ผ์ ์ง์ ํ ์ ์๋ ์์ฑ์ด๋ค.
modalPresentationStyle ์ iOS13 ์์ ๊ธฐ๋ณธ์ ์ธ ํ๋ฉด ์ ํ ๋ฐฉ์์ผ๋ก ๋ฐ๋์๊ณ , ๊ธฐ์กด view ๊ฐ view ๊ณ์ธต์์ ์ฌ๋ผ์ง์ง ์๊ณ , ์๋ก์ด view ๊ฐ ๋ ์๋ ํ์์ด๋ค.
modalPresentationStyle ์์ฑ์ผ๋ก ์ค์ ํ ์ ์๋ ํ์ ๊ฐ์ 11๊ฐ์ง๋ก ๋ค์ ๋ฌธ์์ ๋์์๋ค.
class MainVC: UIViewController {
// ...
// MARK: - Action
@IBAction func infoButtonTapped(_ sender: Any) {
let storyBoard = UIStoryboard.init(name: "Main", bundle: nil)
let popupVC = storyBoard.instantiateViewController(withIdentifier: "PopupVC")
popupVC.modalPresentationStyle = .overFullScreen
present(popupVC, animated: false, completion: nil)
}
}
โ๏ธ ๋ชจ์๋ฆฌ๊ฐ ๋ฅ๊ทผ, ๊ทธ๋ฆผ์๊ฐ ์ ์ฉ๋ ๋ทฐ ๊ตฌํํ๊ธฐ
* ์ผ๋ฐ์ ์ผ๋ก View์ ๊ทธ๋ฆผ์๋ฅผ ์ ์ฉํ ๋์๋ ๋ณ๋์ ์ฒ๋ฆฌ๋ฅผ ํ์ง ์์๋ ๋์ง๋ง, View์ ๋ชจ์๋ฆฌ๋ฅผ ๋ฅ๊ธ๊ฒ ๋ง๋ ๊ฒฝ์ฐ ๊ทธ๋ฆผ์๋ฅผ ์ ์ฉํ๋ฉด ๊ทธ๋ฆผ์๊ฐ ์ ์์ ์ผ๋ก ๋ํ๋์ง ์์ต๋๋ค.
1. ๋ชจ์๋ฆฌ๊ฐ ๋ฅ๊ทผ ๊ทธ๋ฆผ์๋ฅผ ์ ์ฉํ๊ธฐ ์ํ containerView ๋ฅผ ๋ง๋ ๋ค.
- ๊ทธ๋ฆผ์๋ฅผ ์ ์ฉํ๊ธฐ ์ํด์๋ shadowColor, shadowOffset, shadowRadius, shadowOpacity ๋ฅผ ์ค์ ํด์ฃผ๋ฉด ๋ฉ๋๋ค!
- shadowColor :: ๊ทธ๋ฆผ์ ์์, shadowOffset :: ๊ทธ๋ฆผ์์ ์์น
- shadowRadius :: ๊ทธ๋ฆผ์ ๊ฒฝ๊ณ์ ์ ๋ช ๋, shadowOpacity :: ๊ทธ๋ฆผ์ ํฌ๋ช ๋
2. infoView (๊ธฐ์กด๋ทฐ) ์ ๋ชจ์๋ฆฌ๋ฅผ ๋ฅ๊ธ๊ฒ ์ฒ๋ฆฌํ๋ค.
๋ชจ์๋ฆฌ๋ฅผ ๋ฅ๊ธ๊ฒ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์๋ ๋ ์์ ์ ์ํํด์ฃผ๋ฉด ๋ฉ๋๋ค.
- UIView.layer.cornerRadius ์์ฑ์ ์ํ๋ radius ๊ฐ์ผ๋ก ์ค์ ํฉ๋๋ค.
- UIView.clipsToBounds ์์ฑ์ true ๋ก ์ค์ ํด ๋ ์ด์ด ๋ฐ๊นฅ ๋ถ๋ถ์ ์๋ผ๋ ๋๋ค.
3. containerView ์ infoView ๋ฅผ ์ถ๊ฐํ๋ค.
- 1๋ฒ ๊ณผ์ ์์ containerView ๋ฅผ ๋ง๋ ํ์ ์ถ๊ฐํด๋ ๋ฌด๋ฐฉํฉ๋๋ค!
4. containerView ์ AutoLayout ์ ์ง์ ํ๋ค.
- infoView ์ AutoyLayout ์ ์ง์ ํ๋๋ผ๋, containerView ํ์ ๋ทฐ๋ก ์ง์ ํ๊ธฐ ๋๋ฌธ์ AutoLayout ์ค์ ์ ๋ค์ ํด์ค์ผํฉ๋๋ค.
- ์ ๋ ์ด๋ถ๋ถ์์ AutoLayout ์ค์ ์ ๋์ณ์ ํค๋งธ์์ด์! ๐ข
์ถ๊ฐ์ ์ผ๋ก, PopupVC ๋ฅผ ์ข ๋ฃํ๊ธฐ ์ํด ๋ฒํผ์ด๋ Tap Gesture ๋ฅผ ์ถ๊ฐํ๋ฉด ๋ฉ๋๋ค~
class PopupVC: UIViewController {
@IBOutlet weak var infoView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
// shadow ์ ์ฉํ๊ธฐ ์ํ containerView
let containerView = UIView()
containerView.layer.shadowColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.25).cgColor
containerView.layer.shadowOffset = CGSize(width: 1, height: 4)
containerView.layer.shadowRadius = 10
containerView.layer.shadowOpacity = 1
containerView.addSubview(infoView)
// infoView ๋ชจ์๋ฆฌ ๋ฅ๊ธ๊ฒ ๋ง๋ค๊ธฐ
infoView.layer.cornerRadius = 25
infoView.clipsToBounds = true
view.addSubview(containerView)
// containerView ์ ๋ํด Auto Layout ์ค์
containerView.translatesAutoresizingMaskIntoConstraints = false
containerView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
containerView.centerYAnchor.constraint(equalTo: view.centerYAnchor, constant: -10).isActive = true
containerView.widthAnchor.constraint(equalToConstant: 315).isActive = true
containerView.heightAnchor.constraint(equalToConstant: 367).isActive = true
}
@IBAction func closeButtonTapped(_ sender: Any) {
self.dismiss(animated: false, completion: nil)
}
}
์ฐธ๊ณ ๋ฌธ์
- [์ ํ ๊ฐ๋ฐ์ ๋ฌธ์] modalPresentationStyle :: Instance Property
- [์ ํ ๊ฐ๋ฐ์ ๋ฌธ์] UIModalPresentationStyle :: modalPresentationStyle ๋ก ์ค์ ํ ์ ์๋ ๊ฐ๋ค
์ฐธ๊ณ ๋ธ๋ก๊ทธ