티스토리 뷰
iOS(Swift 4.0) Views, TabBar, Navigation, AutoLayout, MARK
(StoryBoard를 이용한 iOS개발)
1.Various View
ㄱ. StackView
StackView 내용물은 Subview가 아닌 ArrangedSubView
SubView :
ArrangedSubView :
StackView에 내용물을 넣기 이전에 StackView의 크기를 먼저 결정짓는다.
Constraint나 동적 할당 등으로 크기가 고정되어있지 않으면 안의 내용물로 Frame이 결정됨
StackView를 채우는 방법
Fill : 알아서 크기를 채움. 어떠한 뷰가 커질지 모른다.
Fill Equally : 균등하게 크기를 유지한다.(자주 사용)
Fill Proportionally : 비율에 맞춰 스택뷰를 채움
Equal Spacing : 모든 뷰들이 일정한 간격으로 배열
Equal Centering : 모든 뷰들이 일정한 Center to Center 간격으로 배열
ㄴ. ScrollView
아이폰 디바이스들의 비율이 다름으로 ScrollView의 사용이 중요하다(AutoLayout)
구성요소
ContentInset : ContentView 내의 Padding
IndicatorInset : 스크롤 바의 Padding
Offset : 밀리는 정도(스크롤의 위치)
2. TabBar, Navigation Controller
TabBar 또는 Navigation Controller 추가 : [Editor]-[Embeded in]-[Navigation Controller]
TabBar Controller를 클릭, 새로운 ViewController에 [control]키와 함께 드래그, [Relationship Segue]-[view controllers]
파일명 [NSObject+(프로젝트명)].swift를 생성,
import Foundation
extension NSObject{
static var reuseIdentifier: String{
return String(describing: self)
}
}
Navigation 방식
let storyBoard = UIStoryboard(name: "Main", bundle: nil)
guard let secondViewController:SecondViewController = storyBoard.instantiateViewController(withIdentifier: "SecondViewController") as? SecondViewController else {return}
//SecondViewController의 [identity]-[Storyboard ID] 설정 필수!
self.navigationController?.pushViewController(secondViewController, animated: true)
------------NSObject+(프로젝트명) 파일 생성 시------------
let storyBoard = UIStoryboard(name: "Main", bundle: nil)
guard let thirdViewController = storyBoard.instantiateViewController(withIdentifier: ThirdViewController.reuseIdentifier) as? ThirdViewController else {return}
present(thirdViewController, animated: true, completion: nil)First View로 이동하기
Unwind Segue
돌아가고 싶은 ViewController :
@IBAction func unwindViewController(segue:UIStoryboardSegue){}
Unwined segue가 발생할 ViewController
[ViewController]를 [Exit]으로 드래그
[Storyboard Unwind Segue]에서 [Identifier] 부여
Alert controller를 통한 unwind
@IBAction func comeBackAction(_sender : UIButton){
//declare Alert controller
let alertController = UIAlertController(title: "알림", message: "첫 화면으로 돌아가시겠습니까?", preferredStyle: .alert)
//declare Alert Action
let cancelAction = UIAlertAction(title: "취소", style: .cancel, handler: nil)
let okAction = UIAlertAction(title: "확인", style: .default, handler: {(uialertaction) in
self.performSegue(withIdentifier: "unwindToFirst", sender: nil)
})
alertController.addAction(cancelAction)
alertController.addAction(okAction)
self.present(alertController, animated: true, completion: nil)
}self.performSegue(withIdentifier: "unwindToFirst", sender: nil)
presentingViewController
@IBAction func moveFirstViewContrllerBtn(sender : UIButton){
let presentingController = self.presentingViewController as? UITabBarController
dismiss(animated: false, completion: {
let navi = presentingController?.childViewControllers[0] as? UINavigationController
navi?.popViewController(animated: false)
})
}
3. AutoLayout
Auto Layout dynamically calculates the size and position of all the views in your view hierarchy, based on constraints placed on those views
Automatic-preview로 Constraint 걸린 것을 디바이스별로 확인할 수 있음.
ㄱ. Constraint
구성요소
Item 1, 2 : 기준이 될 item1, 적용이 될 item2
Multiplier
Constant
(X, Y)좌표와 Width, Heigth를 결정해줘야한다!!
Top, Left(leading), Right(trailing), Bottom
leading : 글씨 시작점(한국은 왼쪽, 아랍어는 오른쪽 등)
trailing : leading의 반대
Content Hugging : 컨텐츠가 늘어나지 않게(자주 사용) / 컨텐츠 고유 사이즈보다 뷰가 커지지 않도록 제한
Compression Resistance : 컨텐츠가 늘어나게 /. 컨텐츠 고유 사이즈보다 뷰가 작아지지 않도록 제한
View가 자기 자신을 끌면 ratio를 유지할 수 있음
Width, Height의 경우 16 이하의 값은 괜찮지만, 웬만해서는 고정시키지말고 ratio를 설정하자
ScrollView에서는 Vertical Sapcing을 주도록 한다.
ScrollView에서 View끼리 Top을 맞춘다 = y축에 대하여 동일선상에 놓는다.(잘못된 방법)
4. Mark
//MARK:-Properties
//MARK:IBAction
5. WebKit
[info.plist]-"App Transport Sequrity Settings"-"Allow Arbitrary Loads(True)", "Allow Arbitrary Loads in Web … (True)"
ViewController-Bottom Bar-Translucent Tollbar
6. Tap Gesture
ImageView에 Tap Gesture을 부여할 시, "User Interaction Enabled"를 체크해야함.
7. Custom Toggle Button
Create ToggleButtonCollection and Connect IBAction
@IBOutlet var toggleBtnCollection: [UIButton]!
@IBAction func toggleBtnTouchUp(_ sender:UIButton){
for button in toggleBtnCollection
{
if(button == sender){
button.isSelected = true
}
else{
button.isSelected = false
}
}
}
8. Tip
모든 것은 Navigation Controller가 수행한다.
view1 -(push)-> view2 -(present)-> view3
view3를 present시킨 것은 Navigation Controller이다.
Property는 self를 붙여 구분이 가능하게 하자.
swift파일을 만들어서
NSObject+[ProjectName]
extension NSObject{
static var reuseIdentifier: String{
return String(describing: self)
}}코드 상에서는 ControllerName.reuseIdentifier 로 호출하여 사용
ViewController 사이즈 조정하기 : ViewController의 [Attribute Inspector]-[Simulated Size]-"Freeform"으로 변경
'iOS(swift)' 카테고리의 다른 글
[Swift 4] Fakebook 만들기 - 3. AutoLayout, Dynamic(AutoSize) CollectionView Cell, Rounded Image (0) | 2017.11.25 |
---|---|
[Swift 4] Fakebook 만들기 - 2. CollectionViewController, NavigationBar (0) | 2017.11.25 |
[Swift 4] Fakebook 만들기 - 1. Xcode 라이브러리 (0) | 2017.11.25 |
자주 사용할 코드 (0) | 2017.11.02 |
iOS(Swift 4.0) 기본 정리(2017.09.26) (0) | 2017.09.26 |
- Total
- Today
- Yesterday
- Cell Animation
- CollectionView
- BOJ
- Grid
- CustomCollectionViewCell
- command
- 생활코딩
- 데이터 바인딩
- XAML
- 백준온라인
- Add TapGesture
- DP
- 객체
- 스택
- UIView Animation
- dfs
- WPF
- Fakebook
- C++
- listview
- FEED
- 그래프
- 문자열
- 코딩야학
- MVVM
- Custom Cell
- BFS
- 타일링
- 백준
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |