✅ iOS Versioin, Device Orientation 설정
✅ AppIcon 적용 → 다양한 해상도 이미지를 얻기 위해 이 링크 사용
✅ LaunchScreen 적용
→ 제약 설정
→ 지정 시간(3초) 동안 보여주기
✅ 화면 UI 구성
-
스택뷰 ( TextField + PaddingView + Button)
- PaddingView 와 Button 에 고정 Width 제약을 주었다. (텍스트필드는 화면 크기에 따라 유동적인 길이를 가짐)
- LayoutMargins 적용하기
searchStackView.directionalLayoutMargins = NSDirectionalEdgeInsets(top: 0, leading: 8, bottom: 0, trailing: 0) // 이 코드가 없으면 적용이 안됨.......... searchStackView.isLayoutMarginsRelativeArrangement = true
-
🔥 버튼 Title 길이에 따라 버튼 너비가 유동적으로 변하게끔 구현
-
Background Image
✅ 뷰객체 Outlet 연결 , Outlet Collection 사용하였다.
✅ UIButton 클래스를 상속한TagButton
클래스 구현 ( init 커스텀, 관련 속성 과 인터페이스 캡술화 )
class TagButton: UIButton {
private let customDefinedWidthPadding: CGFloat = 15
override var intrinsicContentSize: CGSize {
let defaultSize = super.intrinsicContentSize
let width = defaultSize.width + (customDefinedWidthPadding * 2)
let height = defaultSize.height
return CGSize(width: width, height: height)
}
required init?(coder: NSCoder) {
super.init(coder: coder)
self.isHidden = true
applyRoundDesign(to: self)
}
private func applyRoundDesign(to view: UIView) {
view.layer.cornerRadius = view.frame.height / 3
view.layer.borderWidth = 2
view.layer.borderColor = UIColor.black.cgColor
}
}
✅ Constraint 적용
✅ 탭 제스쳐를 적용하여 키보드가 올라와있을 때 다른 곳을 탭하면 키보드를 내려준다.
→ TapGestureRecognizer 의 Action 을 연결, resginFirstResponder()
로 구현
→ 이 때, 뷰 대신 화면 전체를 가리고 있었던 imageView 에 탭 제스처를 추가하여 제스처가 반응을 하지 않는 현상을 해결하느라 시간을 좀 썼다.
그런데 내가 실제로 탭한 것은 분명 루트 뷰가 아니라 그위를 덮고 있는 이미지 뷰였을 텐데 왜 터치가 무시 되었을까....? 라고 생각하니 .isUserInteratcionEnabled
속성이 떠올랐다. 이 속성을 키니 탭제스처가 이미지 뷰에 추가되어도 잘 동작을 했다.
그리고 덮고 있는 이미지뷰의 UserInteraction 을 끄고, 루브 뷰에 탭 제스처를 연결해도 이벤트 전달이 잘 되었다.
→ 제스처 & 리스폰더와 관련하여 공부중 🔥
✅ 검색 버튼을 누르면 신조어 검색 작업이 시작 된다.
✅ TextField 의 Text 에 해당하는 의미의 결과를 Label 문자열에 표기한다.
😅 키보드의 리턴키를 눌러도 신조어 검색 작업이 이루어진다.
textFieldShouldReturn(_ textField: UITextField)
에서 구현해주면 된다.
서버에서 데이터를 가져올 경우 시간이 더 걸릴 수 있다.
결과를 가져오는데 시간이 걸려서 로딩이 발생할 경우 사용자 UX 를 통해 적절하게 기다리게 할 수 있는 제스쳐를 구현해주어야 한다.
- 왜? 네트워크 요청을 계속 보낼수 있게 하면 안된다.
- 요청 처리하는 서버 비용이 돈이라