전체 글 67

DispatchSemaphore

DispatchSemaphore semaphore를 사용하여 여러 실행 컨텍스트에서 리소스에 대한 액세스를 제어하는 개체 semaphore를 사용하여 동시에 진행되는 작업의 개수를 제한하거나 두 스레드의 이벤트 완료 상태 동기화 임계구역에 들어갈때 wait()(value값 -1), 나올때는 signal()(value값 +1)호출 세마포어의 값이 0이되면 공유자원이 1개 이상이 될때까지 대기 DispatchSemaphore 생성 // 공유 자원의 개수가 3개인 세마포어 생성 let dispatchSemaphore = DispatchSemaphore(value: 3) wait(), signal()을 통한 공유자원 접근 확인 for i in 1...5 { dispatchSemaphore.wait() // 세마..

swift 2022.02.06

UICollectionView Custom Layout

※ 아래 글은 UICollectionView Custom Layout을 참고하여 일부 번역한 글입니다. UICollectionView Custom Layout UICollectionView는 iOS6부터 소개되었고, iOS 개발자 사이에 가장 인기있는 UI요소가 되었다. CollectionView는 레이아웃을 처리하기 위해 별도의 개체에 의존하는 data, presentation layer를 분리한 부분이 매력적으로 적용되었다. 레이아웃은 뷰의 배치 및 시각적 속성을 결정하는 역할을 한다. 보통 default로 FlowLayout을 사용하는 경우가 많다. 그러나 원하는대로 뷰를 정렬하기 위해 커스텀 레이아웃을 구현할 수도 있다. 이를 통해 View가 유연하고 강력하게 작동 할 수 있다. 아래 Pinter..

swift 2022.02.03

Navigation

Navigation 사람들은 앱이 기대에 미치지 않을 때 까지 네비게이션 바를 인식하지 못하는 경향이 있다. 당신의 역할은 앱 자체에 주의를 기울이지 않고 앱의 구조와 목적을 지원하는 방식으로 네비게이션을 구현하는 것이다. 네비게이션은 자연스럽고 친숙하게 느껴져야 하며 인터페이스를 지배하거나 콘텐츠에서 초점을 멀어지게 하면 안된다. iOS에선 세가지 네비게이션 스타일이 있다. 1.Hierarchical Navigation 목적지에 도착할 때 까지 스크린 하나당 하나의 초이스만 제공해라. 다른 목적지로 가기위해 뒤로가거나 처음부터 다시 시작하거나 다른 결정을 선택해야 한다. Settings과 Mail이 Hireachical Navigaion 스타일을 사용한다. 2. Flat Navigation 여러 콘텐츠..

HIG 2022.01.30

Modality

Modality Modality는 콘텐츠를 종료하기 위해 명시적인 작어빙 필요한 임시 모드로 콘텐츠를 표시하는 기술이다. 콘텐츠를 모달로 표시하면 아래의 항목을 수행할 수 있다. 사람들이 독립적인 작업이나 밀접하게 관련된 옵션에 집중할 수 있도록 도와준다. 사람들이 중요한 정보를 받도록 보증하고, 필요한 경우 수행할 수 있도록 한다. 다양한 시스템 정의 모달 경험을 가능하게 하기 위해, iOS는 alert, activity view, share sheets, action sheet를 제공한다. 앱에서 커스텀 모달을 보여주기 위해 다음 프레젠테이션 스타일 중 하나를 사용할 수 있다. Automatic. default 프레젠테이션 스타일을 사용한다. Fullscreen. 이전 view를 덮고 dismiss할..

HIG 2022.01.30

Binary Tree

Binary Tree 아래 두가지를 만족하는 트리 1) 어떠한 노드를 기준으로 왼쪽은 기준이 되는 노드보다 전부다 작아야된다. 2) 어떠한 노드를 기준으로 오른쪽은 기준이 되는 노드보다 전부다 커야된다. 일반 배열에 비해 추가, 제거, 검색의 작업횟수가 크게 줄어든다. Heap은 완전이진트리기 때문에 배열이나 리스트로 구현했지만 이진탐색트리는 완전 이진 트리가 아니기 때문에 Node로 구현 Search 정렬되지 않은 배열의 탐색은 순차적으로 탐색하기 때문에 O(n) 이진 탐색 트리는 큰값과 작은값을 비교하면서 찾기 때문에 O(log n) 루트노드가 없는경우 nil반환 data와 노드의 왼쪽자식과 오른쪽 자식을 비교해가면서 확인 노드 반환 func search(_ data: T) -> Node? { if ..

자료구조 2022.01.26

Dynamic Cell Size CollectionView

cell안의 Label크기에 따른 Dynamic Cell Resizing systemLayoutSizeFitting사용 systemLayoutSizeFitting이란? 제약조건과 지정된 우선순위에 따라 최적의 View크기를 반환한다. constraint가 설정된 상황에서 사용가능 parameter targetSize 선호하는 크기를 지정한다. 가능한 큰 크기의 View를 얻으려면 layoutFittingExpandedSize사용 가능한 작은크기의 View를 얻으려면 layoutFittingCompressedSize사용 horizontalFittingPriority 수평 constraints를 설정. fittingSizeLevel을 사용하면 targetSize의 width와 비슷한 width로 설정 ver..

swift 2022.01.25

Tabbar Paging With CollectionView

Tabbar Paging With CollectionView View구성은 총 세개로 구성 Tab CollectionView Indicator HighlightView Page CollectionView 적용 방안 tab터치 시 하단 페이지 스크롤 하단 페이지 스크롤 시 상단 탭메뉴 변경 상단 탭변경시 Indicator 변경 collectionView, highlightView 정의 private let tapBarCollectionView: UICollectionView = { let layout = UICollectionViewFlowLayout() layout.itemSize = CGSize(width: 80, height: 30) layout.minimumLineSpacing = 10 layout..

swift 2022.01.25

Carousel Effect

Carousel Effect 회전목마를 뜻하고 슬라이드 형태로 슬라이드되어 보여지는 UI CollectionView를 이용한 Carousel Zoom Paging효과 CollectionView cell에 마진이 있기때문에 scrollViewWillEndDragging Delegate를 사용하여 페이징 처리 (cell의 width와 cell사이 간격을 포함한offset에 collectionView의 Inset을 뺀만큼 스크롤) // CollectionView cell scroll func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity:CGPoint, targetContentOffset: UnsafeMutablePoin..

swift 2022.01.22

Launching

Launching launch 경험은 사람들이 앱에대해 느끼는 방식중 큰영향을 미친다. 사람들이 사용하는 기기나 앱을 마지막에 연 이후에 관계없이 launch 경험은 빠르고 원활해야 한다. 아래 가이드라인은 즐거운 launch경험을 디자인하는데 도움을 준다. (Responding to the Launch of Your App 참고) Provide a launch screen lauch screen을 제공해라. 시스템은 앱이 시작될때 launch screen을 표시하고 앱의 첫번째 화면을 빠르게 대체한다. launch screen의 기능은 초기 컨텐츠가 로드되는 동시에 앱이 빠르고 반응적이라는 인식을 준다. launch screen에서 매끄럽게 전환되도록 하려면 첫번째 화면과 유사하게 디자인하고 그 자체로..

HIG 2022.01.21

Progress Indicators

Activity Indicators 복잡한 데이터를 로로딩하거나 동기화 작업등 정량화할 수 없는 작업이 수행되는 동안 인디케이터가 회전한다. 작업이 완료되면 사라진다. Activity Indicators는 비대화형이다. Favor progress bars over activity indicators activity indicator보다 progress bar를 선호해라. 활동을 수량화 할 수 있는 경우 활동을 표시기 대신 progress bar를 사용하여 사람들이 어떤일이 일어나고 얼마나 걸릴지 더 잘 확인할 수 있게 해라. Keep activity indicators moving activity Indicator를 계속 움직여라. 사람들은 정지된 activity indicator를 정지된 프로세스와 연..

HIG 2022.01.20