본문 바로가기

iOS

(65)
[Swift] 네비게이션 바 커스텀으로부터 살아남기.. UIBarButtonItem 네비게이션 바에 다음과 같은 기능을 추가해야 했습니다. ( 선 제외 ) 앱 로고와 두개의 버튼을 추가해야하는데 버튼 사이에 spacing이 필요했습니다. 처음엔 UINavigationBar를 대체하는 커스텀 UIView 안에 UILabel과 UIButton 총 3개의 컴포넌트 포함하도록 만들어서 네비게이션 바의 subview에 추가 했었습니다. (상당히 쉽다는 생각이 들었습니다.) 새로운 뷰로 push하기 전에 네비게이션 바를 없애야 했습니다. 아무리 커스텀 UIView의 subview를 nil로 하던,, 네비게이션 바에 addSubview로 추가한 커스텀 컨테이너 네비바를 nil처리하던 계속해서 다른 뷰컨트롤러를 push할 때 이전 네비 바의 모양이 상속 되었습니다.. ( 쉽지 않네요 ) 뒤늦게 알게된..
[Swift] UI Compoenet에 Shadow 적용 방법 | shadowPath | 쉐도우가 적용되지 않았던 이유... 안녕하세요. 이번 포스트는 shadow 적용하는 방법과 shadowPath를 사용한 shadow rendering 최적화 방법, 그리고 쉐도우가 적용이 안됬던 제 경험을 글로 작성했습니다. 1. UIView에 shadow 적용하는 방법UIView에 쉐도우를 적용하는 방법은 기본적으로 layer 속성을 이용하면 됩니다. let view = UIView() ... view.layer.shadowColor = UIColor.black.cgColor view.layer.shadowOpacity = 0.5 view.layer.shadowOffset = CGSize(width: 2.0, height: 2.0) view.layer.shadowRadius = 4.0 1. layer에서 보여질 shadow color를 ..
[Swift] MVVM에서 Combine을 활용한 ViewModel Input/Output binding 개념 완벽 부수기 +_+ | MVC와 MVVM 차이 진짜 뿌수기!!!! 안녕하세요! 이번 포스트는 MVVM 패턴을 사용할 때 Conbine framework로 ViewModel과 View를 Input/Output binding하는 방법에 대해 소개하려고 합니다. 뷰에서 발생 가능한 Input!, 그리고 View가 화면을 그려야 할 State!를 ViewModel은 Output!함으로 뷰의 render가 진행됩니다. 소프티어 부트캠프 활동을 하며 새로 배운 개념이 많아 기존의 글을 리빌딩 했습니다.그 전에! MVVM과 MVC 아키텍처 패턴의 차이가 무엇인지 명확하게 알아야합니다. 둘의 차이가 무엇인지 아시는 분들만이 MVVM을 잘 활용한다고 할 수 있습니다. 저는 제 나름대로 MVVM과 MVC 아키텍처의 차이점을 정리해봤습니다(관련 포스트 링크). MVC, MVVM 차이를 이..
[swift] UIImageView shadow 적용 안되는 이유.. | clipsTobounds 오늘은 udp socket 통신을 관련 공부를 c언어로 학습하고 swift로 적용하려던 중에 새롭게 알게된 내용이 있습니다. UIImageView에 쉐도우를 적용하려고 했었는데 적용이 안됬습니다.. 이때 제 이미지 뷰의 선언은 아래와 같습니다. let photoView: UIImageView = { let iv = UIImageView() iv.image = UIImage(named: "flower") iv.clipsToBounds = true iv.translatesAutoresizingMaskIntoConstraints = false iv.layer.cornerRadius = 7 iv.layer.shadowColor = UIColor.gray.cgColor iv.layer.shadowOpacity =..
[UIKit] Horizontal collectionView에서 커스텀 scroll indicator로 스크롤 위치 표시 탐구하기 안녕하세요. 오늘은 스크롤 바에 관련된 실험을 하다가 커스텀으로 스크롤 indicator를 구현하게 되었습니다. 스크롤 indicator는 사용자의 드래그 이후 숨길 수도 있습니다. 또한 크기도 지정할 수 있고 크기도 키우거나 줄일 수 있습니다. 1. Setup UICollectionVIew's scroll direction + layout layout을 통해 스크롤 방향과, cell의 설정을 해야 하는데 이전 블로그 위 제목 1. Setup UICollectionView's ... 파트와 동일한데 cell의 크기만 다릅니다. 2. Setup FruitsScrollView final class FruitsScrollView: UIView { // MARK: - Constraints private type..
[iOS/UIKit] UICollectionView horizontal scrollable + custom carousel effect + animations | No4. 컬랙션 뷰 탐구 안녕하세요. 컬랙션 뷰 horizontal 기본 연습을 하다 그냥하면 심심해서 커스텀 카로셀 효과 + 애니메이션까지 적용해봤는데 공부하면서 배운 개념을 정리하려고 합니다. 이렇게 안 하려고 했는데 하다보니,, 최종적으로 완성한 결과물입니다. 구현하면서 스크롤 방향 시점을 체크하는데 애를 좀 먹었지만 에러 없이 잘 됩니다:) 1. Setup UICollectionVIew's scroll direction + layout 이전 포스트에서 컬랙션 뷰의 개념을 간단하게 정리했지만 간단 요약하자면 컬랙션 뷰는 크게 3개의 object가 있습니다. Data source, delegate, layout입니다. 이 중 layout은 collectionView에 보여지는 모든 객체들의 화면의 위치를 담당합니다. cell..
[iOS/Swift] NSCache와 FileManager 등 iOS에서 왜 caching을 할까? 캐싱 개념 탐구하기 안녕하세요. iOS 앱 개발을 할 때 SDWebIamge 라이브러리를 사용해서 url 에서 이미지를 다운받지 않을 때 어떤 일이 발생할 지 앞의 라이브러리나 킹피셔를 사용하지 않고 인스타그램 앱 개발 하고 있는데요. "같은 화면 들어갈 때마다 왜 이미 로드 된 내 이미지를 서버에서 다시 다운 받지?.." 그렇게 알게 된 개념이 caching 입니다. 1. Cache concept in computer structure 컴퓨터 구조를 예로,, 캐시가 없다면 데이터를 가져와 작업을 하기 위해 cpu는 메인 메모리에 있는, 만약 메인 메모리에 원하는 데이터가 없다면 아니면 메모리보다 더 느린 저장 장치에서 메모리를 통해 데이터를 가져와야 합니다. 캐시는 메인 메모리보다 용량이 작은데 그 대신 속도가 엄청 빠릅..
[iOS/UIKit] Cell에 포커싱 맞춰주는 Carousel effect with UICollectionViewController | NO3. 컬랙션 뷰 탐구 안녕하세요. 인스타그램 앱을 유심히 보는데 조금만 스크롤 해도 다음 포스트가 자동으로 보여지는 기능이 신기해서 Carousel effect에 대해서 공부를 해봤습니다. 이번에는 Carousel effect를 제 인스타그램 피드에 적용하며 배운 개념, 느낀점을 정리하려고 합니다. 1. Carousel effect's concept 인스타그램의 포스트 내려갈 때 인데요. 짧은 스크롤을 하면, 다음 포스트를 보여주는데 그냥보여주는게 아니라 상대방의 프로필 부터 포스트 전체를 보여줍니다. Carousel은 컨텐츠를 순환시키는데 user가 많은 드래그 필요없이 더 많은 양의 정보를 보여주는 그런 디자인입니다. Paging도 비슷한 개념입니다. 스크롤 방향에 맞게 위 동영상처럼 horizontal로 포커싱을 맞출 ..