- SOPT 27th ์ฅ๊ธฐ ํด์ปคํค APPJAM
- ๊ธฐ๊ฐ: 2020.12.26 ~ 2021.1.16
๋งค์ผ ์ง๋ฌธ์ ๋ต์ ํ๋ฉฐ ๋๋ฅผ ์์๊ฐ๋ ์ง๋ฌธ๋ค์ด์ด๋ฆฌ BeMe ์ ๋๋ค.
24์๊ฐ๋ง๋ค ์๋ก์ด ์ง๋ฌธ ์ ๊ณต, ์๋ก์ด ์ง๋ฌธ ๋ฐ๊ธฐ๋ฅผ ํตํด ์ง๋ฌธ์ ๋ต์ ํ ์ ์์ต๋๋ค. ์์ ์ ๊ธ์ ์ ์ฒด ๊ณต๊ฐํ์ฌ ์ฌ๋๋ค๊ณผ ์ํตํ ์ ์์ต๋๋ค. ๋ง์ง๋ง์ผ๋ก ๋ง์ดํ์ด์ง์์ ๋ด๊ฐ ์ง๊ธ๊น์ง ๋ตํ ์ง๋ฌธ์ ์ฝ๊ฒ ๋ณผ ์ ์์ผ๋ฉฐ, ๋ด ์๊ฐ์ด ์ด๋ป๊ฒ ๋ณํ๋์ง ํ์ธํ ์ ์์ต๋๋ค.
1. iPhone 12 Pro ์ ์ฉ
2. iPhone 12 mini ์ ์ฉ
3. iPhone SE2 ์ ์ฉ
ํ๋ฉด | ๊ธฐ๋ฅ | ์์ธ ๊ธฐ๋ฅ | ๊ฐ๋ฐ |
---|---|---|---|
์คํ๋์ | ์ค์ฌ๐ | ||
์จ๋ณด๋ฉ | ์ค์ฌ๐ | ||
ํ์๊ฐ์ | ์ค์ฌ๐ | ||
๋ก๊ทธ์ธ | ๋ก๊ทธ์ธ | ์ค์ฌ๐ | |
์๋๋ก๊ทธ์ธ | ์ค์ฌ๐ | ||
ํ | ์ค๋์ ์ง๋ฌธ ๋ฐ ๋ต๋ณ ์ด๋ | ์ค์ฌ๐ | |
๊ณผ๊ฑฐ์ ์ง๋ฌธ ๋ฐ ๋ต๋ณ ์ด๋ | ์ค์ฌ๐ | ||
์ถ๊ฐ ์ง๋ฌธ ์ด๋ | ์ค์ฌ๐ | ||
๋ต๋ณ ๊ณต๊ฐ ๋ฒ์ ์ค์ | ์ค์ฌ๐ | ||
๋ต๋ณ ์์ ๋ฐ ์ญ์ | ์ค์ฌ๐ | ||
ํ์ | ๋์ ๋ค๋ฅธ ๋ต๋ณ๋ค ์ด๋ | ์ฌ์ฉ๐ถ | |
๋ค๋ฅธ ๋ต๋ณ๋ค ๋๋ฌ๋ณด๊ธฐ | ์ต์ , ํฅ๋ฏธ ํญ ๋ฐ ํค์๋ ํํฐ ๊ฒ์ | ์ฌ์ฉ๐ถ | |
์คํฌ๋ฉ/ ์ธ์คํฌ๋ฉ | ์ฌ์ฉ๐ถ | ||
์ ๊ณ ํ๊ธฐ | ์ฌ์ฉ๐ถ | ||
ํ๋ก์ | ํ๋ก์/ ํ๋ก์์ ๋ต๋ณ ์ด๋ | ์ค์ฌ๐ | |
ํ๋ก์/ ํ๋ก์ ์ด๋ | ์ค์ฌ๐ | ||
ํ๋ก์/ ํ๋ก์ ๊ฒ์ | ์ฌ์ฉ์ ๊ฒ์ | ์ค์ฌ๐ | |
ํ๋ก์ฐ/ ์ธํ๋ก์ฐ | ์ค์ฌ๐ | ||
ํ๋ก์ ์ญ์ | ์ค์ฌ๐ | ||
์ ๊ณ ํ๊ธฐ | ์ค์ฌ๐ | ||
๋ง์ดํ์ด์ง | ํ๋กํ ํธ์ง | ์ค์ฌ๐ | |
๋ด ๊ธ, ์คํฌ๋ฉ ์ด๋ | ์ธ๋๐ฟ | ||
ํค์๋ ๋ฐ ํํฐ ๊ฒ์ | ์ธ๋๐ฟ | ||
๋ต๋ณ ๊ณต๊ฐ ๋ฒ์ ์ค์ | ์ธ๋๐ฟ | ||
์คํฌ๋ฉ/ ์ธ์คํฌ๋ฉ | ์ธ๋๐ฟ | ||
๊ธ ์์ธ | ๋ต๋ณ | ๋ต๋ณ ์์ธ ์ด๋ | ์ฌ์ฉ๐ถ |
๋ต๋ณ ์์ ๋ฐ ์ญ์ | ์ฌ์ฉ๐ถ | ||
์คํฌ๋ฉ/์ธ์คํฌ๋ฉ | ์ฌ์ฉ๐ถ | ||
์ ๊ณ ํ๊ธฐ | ์ฌ์ฉ๐ถ | ||
๋๊ธ | ๋๊ธ ์์ฑ | ์ฌ์ฉ๐ถ | |
๋๊ธ์ ๋ต๊ธ ์์ฑ | ์ฌ์ฉ๐ถ | ||
๋๊ธ ๊ณต๊ฐ๋ฒ์ ์ค์ | ์ฌ์ฉ๐ถ | ||
๋๊ธ ์์ ๋ฐ ์ญ์ | ์ฌ์ฉ๐ถ | ||
๊ธ ์ฐ๊ธฐ | ๊ณต๊ฐ๋ฒ์ ๋ฐ ๋๊ธ ๊ธฐ๋ฅ ์ค์ | ์ค์ฌ๐, ์ธ๋๐ฟ | |
์์์ ์ฅ | ์ธ๋๐ฟ | ||
๋ต๋ณํ๊ธฐ | ์ธ๋๐ฟ | ||
ํ์ธํ์ด์ง | ํ๋ก์ฐ/ ์ธํ๋ก์ฐ | ์ธ๋๐ฟ | |
์คํฌ๋ฉ/ ์ธ์คํฌ๋ฉ | ์ธ๋๐ฟ | ||
์ ๊ณ ํ๊ธฐ | ์ธ๋๐ฟ | ||
์ต๊ทผ ํ๋ | ๋๊ธ ๋ฐ ๋ต๊ธ ์๋ฆผ | ||
ํ๋ก์ ์๋ฆผ | |||
์ฅ๊ธฐ ํธ์ฌ ์๋ฆผ | ์ค๋์ ์ง๋ฌธ ๋ฐ๊ธฐ | ์ค์ฌ๐ |
- ๊ธ์ฐ๊ธฐ
answer data๋ฅผ ๋ฃ์ด์ ๊ธ์ ๋ฑ๋กํ๋ ์ฝ๋
AnswerRegistService.shared.regist(answerID: answerData!.id!, content: answerData!.answer!, commentBlocked: commentSwitch.isOn, isPublic: answerSwitch.isOn) {(networkResult) -> (Void) in
switch networkResult{
case .success(let data) :
print(self.isFromFollowingTab)
if self.isFromFollowingTab {
self.followScrapButtonDelegate?.fromAnswerVC(indexInVC: self.indexInFollowingVC!)
}
case .requestErr(let msg):
if let message = msg as? String {
print(message)
}
case .pathErr :
print("pathErr")
case .serverErr :
print("serverErr")
case .networkFail:
print("networkFail")
}
}
- ํ์ธ์ด ์ด ๊ธ ๋ณด๊ธฐ
๋ค๋ฅธ ํ์ด์ง๋ฅผ ๋ค๋ ์์ ๋ค๋ฅธ ์ฌ๋์ ๊ธ์ ๋ณ๋์ด ์๊ธธ ๊ฒฝ์ฐ ์๋ก ํต์ ์ ํด์ Reloadํด์ค์ผํจ ํ์ด์ง ํด์ ์ ๋ณด๋ฅผ ๋ฐ๊ธฐ ๋๋ฌธ์ 1ํ์ด์ง๋ถํฐ ์๋์ ํ์ด์ง๊น์ง ๋ค์ ๋ฐ์์์ผ ํจ ์ด ๊ณผ์ ์์ ์ฒ์์๋ for๋ฌธ์ ์ด์ฉํด์ ์ด๋ ค์์ ๊ฒช์์ผ๋, ํต์ ์์์ ์ฌ๊ทํจ์ ํธ์ถ์ ํตํด ํด๊ฒฐ
func getUpdateAnswers(){
let loadingFrame = CGRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height)
LoadingHUD.show(loadingFrame: loadingFrame,color: .white)
curPage = 0
answers = []
updateDataOnePage()
}
func updateDataOnePage(){
curPage += 1
let loadingFrame = CGRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height)
FollowingGetAnswersService.shared.getAnswerData(page: curPage){(networkResult) -> (Void) in
switch networkResult{
case .success(let data) :
if let answerDatas = data as? FollowingAnswersData {
self.pageLen = answerDatas.pageLen
for answerData in answerDatas.answers{
self.answers.append(answerData)
}
}
if self.curPage < self.answerPage {
self.updateDataOnePage()
}
else{
DispatchQueue.global(qos: .background).sync {
self.wholeCollectionView.reloadData()
self.wholeCollectionView.setContentOffset(CGPoint(x: 0, y: self.lastY), animated: false)
}
LoadingHUD.hide()
if self.answers.count == 0{
self.customEmptyView.setItems(text: "์์ด์ฟ ..! ์์ง ํ๋ก์ฐํ๋ ์ฌ๋์ด ์๊ตฐ์\nํ๋ก์์ ํ๊ณ ๋ค๋ฅธ ์ฌ๋๋ค์ ๊ธ์ ๋๋ฌ๋ณด์ธ์")
self.wholeCollectionView.addSubview(self.customEmptyView)
print(self.customEmptyView.superview?.bounds.minX)
self.customEmptyView.snp.makeConstraints{
$0.centerX.equalToSuperview()
$0.top.equalToSuperview().offset(362)
$0.height.equalTo(80)
}
}
else{
self.customEmptyView.removeFromSuperview()
}
}
print("success")
case .requestErr(let msg):
if let message = msg as? String {
print(message)
}
case .pathErr :
print("pathErr")
case .serverErr :
print("serverErr")
case .networkFail:
print("networkFail")
}
}
}
-
UIView Extension
extension UIView { // Set Rounded View func makeRounded(cornerRadius : CGFloat?){ // UIView ์ ๋ชจ์๋ฆฌ๊ฐ ๋ฅ๊ทผ ์ ๋๋ฅผ ์ค์ if let cornerRadius_ = cornerRadius { self.layer.cornerRadius = cornerRadius_ } else { // cornerRadius ๊ฐ nil ์ผ ๊ฒฝ์ฐ์ default self.layer.cornerRadius = self.layer.frame.height / 2 } self.layer.masksToBounds = true } // Set UIView's Shadow func dropShadow(color: UIColor, offSet: CGSize, opacity: Float, radius: CGFloat) { // ๊ทธ๋ฆผ์ ์์ ์ค์ layer.shadowColor = color.cgColor // ๊ทธ๋ฆผ์ ํฌ๊ธฐ ์ค์ layer.shadowOffset = offSet // ๊ทธ๋ฆผ์ ํฌ๋ช ๋ ์ค์ layer.shadowOpacity = opacity // ๊ทธ๋ฆผ์์ blur ์ค์ layer.shadowRadius = radius // ๊ตฌ๊ธ๋ง ํด๋ณด์ธ์! layer.masksToBounds = false } // Set UIView's Border func setBorder(borderColor : UIColor?, borderWidth : CGFloat?) { // UIView ์ ํ ๋๋ฆฌ ์์ ์ค์ if let borderColor_ = borderColor { self.layer.borderColor = borderColor_.cgColor } else { // borderColor ๋ณ์๊ฐ nil ์ผ ๊ฒฝ์ฐ์ default self.layer.borderColor = UIColor(red: 205/255, green: 209/255, blue: 208/255, alpha: 1.0).cgColor } // UIView ์ ํ ๋๋ฆฌ ๋๊ป ์ค์ if let borderWidth_ = borderWidth { self.layer.borderWidth = borderWidth_ } else { // borderWidth ๋ณ์๊ฐ nil ์ผ ๊ฒฝ์ฐ์ default self.layer.borderWidth = 1.0 } } }
-
UIViewController
extension UIViewController { // ํ ์คํธ ๋ฉ์ธ์ง func showToast(text: String, completion: @escaping ()->()) { let toast = ToastView(frame: CGRect(x: 0, y: 0, width: 343, height: 84)) toast.setLabel(text: text) toast.alpha = 0 self.view.addSubview(toast) toast.snp.makeConstraints { $0.leading.equalToSuperview().offset(16) $0.trailing.equalToSuperview().offset(-16) $0.bottom.equalToSuperview().offset(-101) } UIView.animate(withDuration: 0.3, animations: { toast.alpha = 1 },completion: { finish in UIView.animate(withDuration: 0.3, delay: 0.7, animations: { toast.alpha = 0 }, completion: { finish in if finish { toast.removeFromSuperview() completion() } }) }) } }
-
UIImageView
// Kingfisher๋ฅผ ์ด์ฉํ์ฌ url๋ก๋ถํฐ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ค๋ extension extension UIImageView { public func imageFromUrl(_ urlString: String?) { if let url = urlString { self.kf.setImage(with: URL(string: url), options: [.transition(ImageTransition.fade(0.5))]) } } }
์ค์ฌ | ์ธ๋ | ์ฌ์ฉ |
---|---|---|
๋ค์ด์ค |