SeSAC_iOS_Day 55 | TIL

린다·2021년 12월 16일
0

SSAC_iOS_Dev

목록 보기
26/33
post-thumbnail

📂 ScenenDelegate

✔️ ViewController Initializer

  1. Storyboard를 사용하는 경우 : 컨트롤러 및 관련된 뷰를 정의할 때는 ViewController 클래스를 직접 초기화 할 수 없기 때문에 instantiateViewController(withIdentifier:)를 통해 프로그래밍 방식으로 인스턴스화함.
        let sb = UIStoryboard(name: "main", bundle: nil)
        let vc = sb.instantiateViewController(withIdentifier: "vc") as! SnapDetailViewController
  1. XIB를 사용하는 경우
        let bundle = Bundle(for: SettingViewController.self) // Swift Meta Type
        let vc = SettingViewController(nibName: "SettingViewController", bundle: nil)
  1. Code만 사용하는 경우
        let vc = SnapDetailViewController(nibName: nil, bundle: nil)
        // 생략하여 작성한거라고 보면 됨
        let vc = SnapDetailViewController()

✔️ 뷰 띄우는 코드

window?.rootViewController = vc
window?.makeKeyAndVisible() // iOS13부터 생김
  • window: 외부 이벤트를 전달받아 뷰에 이벤트를 전달하는 객체. 하나 이상의 뷰를 사용자에게 보여주는 역할.
  • makeKeyAndVisible 메서드를 호출해야 rootViewController가 현재 화면으로 세팅해줄 수 있음.

✔️ iOS13미만

  • iOS13 미만의 경우 AppDelegate의 didFinishLaunching 메서드에 분기처리를 통해 위의 뷰를 띄워주는 코드를 처리해줘야함
  • 또한 SceneDelegate가 존재하지 않기 때문에 UISceneSession LifeCycle과 관련된 configurationForConnecting 및 didDiscardSceneSession과 같은 메서드 또한 AppDelegate에서 처리해줘야함

📂 Setting View with Code

✔️ UITabBarController

set ViewController

  • ViewController 인스턴스화 시킨 후 setViewControllers([firstVC, secondVC, thirdNav], animated: true) 로 set 해주면 됨
  • tabBarItem(title, image, selectedImage 등) 한 번에 설정해주기 위해서는 UITabBarItem을 생성 후 할당해주면 됨
secondVC.tabBarItem = UITabBarItem(title: "두번째 화면", image: UIImage(systemName: "trash"), selectedImage: UIImage(systemName: "trash.fill"))

set TabBar Appearance

  • let appearance = UITabBarAppearance() 처럼 Appearance 객체 생성
  • 아래 코드처럼 appearance를 변경해준 뒤
appearance.configureWithTransparentBackground()
appearance.backgroundColor = .red
  • tabBar의 appearance(standard, scrollEdge)에 적용시켜주면 됨
tabBar.standardAppearance = appearance
tabBar.scrollEdgeAppearance = appearance

✔️ UIStackView

  • 스택뷰와 스택뷰에 넣을 뷰들을 초기화 및 설정해줌
let firstSquareBoxView: SquareBoxView = {
        let view = SquareBoxView()
        view.label.text = "토스뱅크"
        view.imageView.image = UIImage(systemName: "trash.fill")
        return view
    }()
    
    let secondSquareBoxView: SquareBoxView = {
        let view = SquareBoxView()
        view.label.text = "토스증권"
        view.imageView.image = UIImage(systemName: "chart.xyaxis.line")
        return view
    }()
    
    let thirdSquareBoxView: SquareBoxView = {
        let view = SquareBoxView()
        view.label.text = "고객센터"
        view.imageView.image = UIImage(systemName: "person")
        return view
    }()
    
    let stackView: UIStackView = {
        let stackView = UIStackView()
        stackView.axis = .horizontal
        stackView.spacing = 12
        stackView.alignment = .fill
        stackView.distribution = .fillEqually
        return stackView
    }()
  • subView로 stackView를 넣어주고 addArrangedSubview로 스택뷰에 view를 추가해줌
view.addSubview(stackView)
stackView.addArrangedSubview(firstSquareBoxView)
stackView.addArrangedSubview(secondSquareBoxView)
stackView.addArrangedSubview(thirdSquareBoxView)
  • 스택뷰의 constraint 잡아주기
stackView.snp.makeConstraints {
            $0.top.equalTo(view.safeAreaLayoutGuide).offset(50)
            $0.centerX.equalTo(view)
            $0.width.equalTo(view.snp.width).multipliedBy(1.0).inset(20) // 여백없이 뷰와 똑같은 너비의 stackview가 생성됨
            $0.height.equalTo(80)
        }

0개의 댓글