iOS 13,14,15에서 달라진 점은 무엇이 있을까?

|

개인공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있습니다.


UIButton

https://zeddios.tistory.com/1291

  • 버튼 내부적으로 Activity Indicator 지원

UITableView, UICollectionView DataSource: Diffable Data Source의 등장

https://velog.io/@ellyheetov/UI-Diffable-Data-Source

DataSource: 테이블뷰 혹은 컬렉션 뷰를 그리기 위한 데이터를 관리하고 UI를 업데이트 하는 역할을 함
DataSource와 달리 데이터가 달라진 부분을 추적하여 자연스럽게 UI 업데이트 함

UITableViewDataSource, UICollectionViewDataSource를 대체하는 클래스의 등장
기본적으로 두개가 하는 역할은 같다.

Diffable Data Source를 사용하면 테이블뷰나 컬렉션뷰의 달라진 부분을 자동으로 알아차리고 새로운 부분만 다시 그린다.

  • 추가적인 코드작업 없이도, 퀄리티 있는 에니메이션 적용이 가능하다.
  • 개선된 Data Source 매커니즘은 완벽하게 동기적인 버그나, 예외, 충돌 상황들을 피할 수 있게 해준다.
  • UI 데이터의 동기화 부분 대신 앱의 동적인 데이터와 내용에 집중할 수 있다.
  • identifier와 snapshot을 사용하는 간소화 된 Data 모델을 정의 하고, 이를 이용하여 UI를 업데이트 한다.

데이터가 업데이트 되기 전과 후의 section 수의 변화가 나타나는 경우 보통 에러가 나는데, 그럴때마다 우리는 reloadData()를 해줌.

사용자 경험(UX)에 있다.
reloadData()를 사용하는 경우 한번의 업데이트마다 뚝뚝 끊기는 UI가 보이는 반면 Diffable Data Source를 사용하면 변경된 데이터 부분에 대해 스스륵 사라지고 추가되는 UI 효과가 적용됨.


import UIKit

class ViewController: UIViewController {

    var dataSource: UITableViewDiffableDataSource<Int, UUID>!
    var color: [UIColor] = [.blue, .black, .brown, .cyan, .gray, .green, .magenta]


    @IBOutlet weak var tableView: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()

        // tableView cell 등록
        tableView.register(UITableViewCell.self, forCellReuseIdentifier: "myCell")

        // cell 모양 정의 > cellForRowAt 델리게이트 메소드 역할
        dataSource = UITableViewDiffableDataSource<Int, UUID>(tableView: tableView, cellProvider: {tableView, indexPath, itemIdentifier in
            let cell = tableView.dequeueReusableCell(withIdentifier: "myCell", for: indexPath)
            cell.backgroundColor = self.color[indexPath.row % self.color.count]

            return cell
        })

        // tableView dataSource 프로퍼티에 위 dataSource 프로퍼티 대입
        tableView.dataSource = dataSource

        // snapShop: 현재 UI 상태를 의미
        // appendSection 후 snapShot을 테이블 뷰에 대입되어잇는 dataSource객체에 apply > 자동으로 셀 업데이트
        var snapShot = NSDiffableDataSourceSnapshot<Int, UUID>()
        snapShot.appendSections([0])
//        snapShot.appendItems([UUID(), UUID(), UUID()])
        dataSource.apply(snapShot)
    }


    @IBAction func appendBtn(_ sender: Any) {
        var snapShot = dataSource.snapshot()
        snapShot.appendItems([UUID()])
        dataSource.apply(snapShot)
    }

    @IBAction func insetBtn(_ sender: Any) {
        var snapShot = dataSource.snapshot()
        // 첫번째 item에 삽입
        if let first = snapShot.itemIdentifiers.first {
            snapShot.insertItems([UUID()], afterItem: first)
        }

        dataSource.apply(snapShot)
    }

    @IBAction func deleteBtn(_ sender: Any) {
        var snapShot = dataSource.snapshot()
        // 마지막 item 삭제
        if let lastItem = snapShot.itemIdentifiers.last {
            snapShot.deleteItems([lastItem])
        }
        dataSource.apply(snapShot)
    }
}

UITableView, UICollectionView List Configuration

https://developer.apple.com/videos/play/wwdc2020/10097

https://shoveller.tistory.com/entry/WWDC20-Lists-in-UICollectionView

https://unnnyong.me/2020/07/02/wwdc-2020-advances-in-uicollectionview/

SheetPresentationController

https://beenii.tistory.com/189