본문 바로가기
computing

20251124_iOS12

by greentworkshop 2025. 11. 24.

legacy - 대체로 머지 않아 지원이 중단 될 가능성이 큰 구식 코드나 기능을 의미

 


import UIKit
import WebKit

class WebViewController: UIViewController {
    @IBAction func naver(_ sender: UIButton) {
        guard let url = URL(string: "https://m.naver.com")else{return}
        let request = URLRequest(url: url)
        webView.load(request)
    }
    @IBOutlet weak var webView: WKWebView!
    
    
    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }

}

외부 앱 열기

  • if let appleWebsite = URL(string: "https://www.apple.com") { UIApplication.shared.open(appleWebsite) }
  • if let url = URL(string: "tel://123-4567") { UIApplication.shared.open(url) }
  • if let google = URL(string: "comgooglemaps://?q=서울역") { UIApplication.shared.open(google)}

 

URLRequest요청

(url:cachePolicy:timeoutInterval)

색의 차이로 함수 내부의 default매개변수(기본값이 있어서 값을 넣지 않아도 되는 값)를 구분


시험 출제 가능성

BBMIcjh -> Build Phases -> Choose frameworks and libraries to add: -> WebKit.framework
원래는 위 단계를 거쳐야 하지만 상위 버전의 Xcode버전일 경우 자동으로 해결된다.


 

import UIKit
import WebKit

class WebViewController: UIViewController {
    @IBAction func naver(_ sender: UIButton) {
        /* 1
        let url1 = URL(string: "https://m.naver.com")
        let request = URLRequest(url: url1!)
        webView.load(request)
        */
        /*2*/
        guard let url = URL(string: "https://m.naver.com")else{return}
        let request = URLRequest(url: url)
        webView.load(request)
        /**/
    }
    @IBOutlet weak var webView: WKWebView!
    
    
    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }
}
/*url 링크 기능을 실현하는 방법*/

 

 

앱을 출시하고 싶다면 회전 시 UI도 신경써서 만들어야 한다 

AutoLayout 기능 문제 해결 필요

아래는 align 정렬 메뉴

 

Xcode에서 autolayout을 적용하는 방법

 
 
 
 

📐 Xcode에서 Auto Layout을 적용하는 방법

Xcode에서 Auto Layout은 다양한 화면 크기, 방향(가로/세로), 그리고 장치(iPhone, iPad)에 맞게 UI 요소의 크기와 위치를 동적으로 조정할 수 있도록 해주는 시스템입니다.

Auto Layout을 적용하는 방법은 크게 3가지가 있으며, 모두 **Interface Builder (스토리보드/XIB)**에서 진행됩니다.


1. 캔버스 기반 도구를 사용한 제약 조건 추가 (권장)

Xcode의 Interface Builder 오른쪽 하단에 있는 툴바를 사용하여 제약 조건을 가장 쉽고 빠르게 추가할 수 있습니다.

1.1. 📍 Add New Constraints (핀 메뉴)

이 메뉴는 뷰의 크기 위치를 명시적으로 정의하는 데 사용됩니다.

  1. UI 요소 선택: 제약 조건을 적용할 뷰(예: UILabel, UIButton)를 캔버스에서 선택합니다.
  2. 핀 메뉴 열기: Interface Builder 오른쪽 하단의 'Add New Constraints' 버튼 (핀 모양)을 클릭합니다. *
  3. 위치 제약 조건 추가:
    • 상단(Top), 하단(Bottom), 선행(Leading), 후행(Trailing)의 4개 T자 모양 컨트롤에서 제약 조건을 걸고 싶은 방향을 선택합니다.
    • 입력 필드에 안전 영역(Safe Area) 또는 주변 뷰로부터의 **거리(Spacing)**를 입력합니다.
    • (선택) Constrain to margins 옵션을 해제하면 슈퍼뷰의 경계선에 직접 제약을 걸 수 있습니다.
  4. 크기 제약 조건 추가:
    • **Width**와 Height 체크박스를 선택하고 원하는 크기 값을 입력합니다.
  5. 적용: 하단의 Add [숫자] Constraints 버튼을 클릭하여 제약 조건을 적용합니다.

1.2. 🔗 Align (정렬 메뉴)

이 메뉴는 두 개 이상의 뷰를 정렬하거나, 뷰를 슈퍼뷰의 중앙에 배치할 때 사용됩니다.

  1. UI 요소 선택: 정렬할 뷰를 하나 또는 여러 개 선택합니다.
  2. 정렬 메뉴 열기: Interface Builder 오른쪽 하단의 'Align' 버튼 (별 두 개 겹쳐진 모양)을 클릭합니다.
  3. 정렬 방식 선택:
    • Horizontally in Container 또는 Vertically in Container: 뷰를 슈퍼뷰의 중앙에 수평 또는 수직으로 배치합니다.
    • Leading Edges, Trailing Edges 등: 여러 뷰를 선택했을 때, 각 뷰의 해당 가장자리를 정렬합니다.
  4. 적용: 하단의 Add [숫자] Constraints 버튼을 클릭합니다.

2. Stack View를 사용한 배치

**UIStackView**는 수평 또는 수직 방향으로 여러 뷰를 자동으로 배치하고 크기를 조정해주는 강력한 도구입니다. 복잡한 제약 조건을 직접 걸 필요가 없어 가장 선호되는 방식입니다.

  1. UI 요소 선택: 묶어서 관리할 뷰들을 모두 선택합니다.
  2. 임베드 메뉴 열기: Interface Builder 오른쪽 하단의 'Embed In' 버튼 (삼각형과 사각형 겹쳐진 모양)을 클릭합니다.
  3. 스택 뷰 선택: 팝업 메뉴에서 **Stack View**를 선택합니다. *
  4. 스택 뷰 설정:
    • Attributes Inspector에서 스택 뷰의 Axis (수평/수직), Alignment, Distribution (공간 분배 방식), Spacing (뷰 사이의 간격)을 설정합니다.
  5. 스택 뷰 제약 조건 추가: 이제 개별 뷰가 아닌, 스택 뷰 자체에 대해 1번 방법(핀 메뉴)을 사용하여 위치와 크기 제약 조건을 추가합니다. (예: 스택 뷰를 화면 중앙에 고정하고 너비를 설정)

3. 코드를 사용한 Auto Layout (NSLayoutConstraint/Anchor)

스토리보드를 사용하지 않거나, 동적으로 뷰를 생성할 때 코드로 직접 제약 조건을 설정합니다.

A. NSLayoutConstraint (과거 방식)

Swift
let leadingConstraint = NSLayoutConstraint(
    item: myView, 
    attribute: .leading, 
    relatedBy: .equal, 
    toItem: superview, 
    attribute: .leading, 
    multiplier: 1.0, 
    constant: 20
)
leadingConstraint.isActive = true 

B. NSLayoutAnchor (현재 권장 방식)

**Anchor(앵커)**를 사용하여 제약 조건을 설정하는 것이 훨씬 간결하고 가독성이 좋습니다.

Swift
// 코드에서 Auto Layout을 사용할 뷰에 대해 필수적으로 false로 설정해야 합니다.
myView.translatesAutoresizingMaskIntoConstraints = false 

NSLayoutConstraint.activate([
    // 상단 안전 영역에서 20pt 떨어진 곳에 배치
    myView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 20),
    // 너비를 슈퍼뷰 너비와 같게 설정
    myView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20),
    myView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -20),
    // 높이를 50pt로 설정
    myView.heightAnchor.constraint(equalToConstant: 50)
])

 

 

 

present(playerViewController, animated: true)

player.play()

//뷰 컨트롤러가 완전히 로드되고 화면에 표시될 준비가 되기 전에 재생을 시작.
//
동영상이나 오디오가 아직 보이지 않거나 재생 준비가 안 된 상태에서 소리가 먼저 들리거나, //오류가 발생할 가능성 있음

self.present(playerViewController, animated: true)
player.play()

self.present(playerViewController, animated: true) { player.play()

} //후행 클로저(trailing closure)
//뷰 컨트롤러가 완전히 준비된 상태에서만
//플레이어가 재생되도록 보장하기 때문에 가장 안전하고 안정적인 방법 //완료 핸들러(Completion Handler)"작업 완료 후 호출"

 

 

 

trailing closure 후행 클로저

클로저에서 $1, $0 반드시 시험에 출제

영어이름도 알아두삼

completion handler

간단하게 변형

-> 요거도 생략 가능

단축 인자 사용

축약된 결과

*************************

3단계의 간략화를 컨닝페이퍼에 작성하자

*************************

'computing' 카테고리의 다른 글

20251127-android13, 그래픽, Empty Views Activity menu해결  (0) 2025.11.27
javaweb 13 정리  (0) 2025.11.26
20251117 - iOS12  (0) 2025.11.17
android11  (0) 2025.11.13
20251103_iOS10  (0) 2025.11.03