inset과 offset의 정확한 정의를 잘 모르는 느낌이라 찾아 보았다.
참조
https://minosaekki.tistory.com/36
만약, 그림자의 inset이 (-10, -10) 이라면 그림자는 해당 객체보다 10픽셀 넓고 10픽셀 높은 것이다. 음수로 넣게 되면 그림자를 크게 만들고 양수로 만들면 그림자의 크기를 더 작게 만든다.
content view
가 safe area
또는 scroll view
의 가장자리로부터의 inset
을 의미content inset
은 하위 뷰 콘텐츠에 상하좌우로 빈 공간(padding)을 주는 것이다. 위에서 자기 자신의 바깥쪽이 아닌 안쪽으로 공간을 주는 것을 의미한다.content inset
을 넣는 것이 아닌 그 상위뷰인 스크롤 뷰에 padding
을 주는 것이다.myScrollView.contentInset = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
content offset
은 바운드의 origin point
라고 할 수 있따. 이때 스크롤을 하는 것은 content offset
이 변하는 활동을 말하게 된다. Frame
과 반대로 Bounds
는 자기 자신 뷰를 기준으로 하기 때문에 가능한 것이다.scrollView.contentOffset.x
은 scrollView.bounds.origin.x
와 같은 의미이다. // 일정 스크롤을 하면 다음 데이터를 가져오는 함수
func scrollViewDidScroll(_ scrollView: UIScrollView) {
guard let page = page, !isFetching else {
return
}
let threshold: CGFloat = 0.85
let percent = scrollView.contentOffset.y / (scrollView.contentSize.height - scrollView.bounds.height)
guard !page.last && percent >= threshold else {
return
}
fetch()
}
참조
https://velog.io/@mmim/iOS-View-Drawing-Cycle
공식문서 : 레이아웃 업데이트가 보류중인 경우, 하위 뷰를 즉시 레이아웃한다.
수동으로 layoutSubviews()
를 예약하는 함수, 해당 예약을 바로 실행시키는 동기적으로 작동하는 메소드, 따라서 다음 업데이트 사이클이 올 때 까지 기다리는게 아니라 즉시 layoutSubviews
를 호출함
동기적인 성격 때문에 즉시 값이 변경되어야하는 애니메이션에 많이 사용한다
공식문서 : 수신자의 현재 레이아웃을 무효화하고, 다음 업데이트 주기 동안 레이아웃 업데이트를 트리거 한다.
layoutSubviews()
를 호출하기 위한 예약 방법중 비용이 가장 적게 든다.layoutSubviews
가 호출되게 된다.