본문 바로가기

iOS

(87)
[두깃] 저장소 추가화면 (CollectionView list + Diffable DataSource) 벌써 7번째 글이다..! 개인 프로젝트를 하면서 글 작성을 시작한 이유는 개발하면서 알게 된 것들을 시간이 지나면 잊어버리게 되기 때문에, 나중에 다시 보면서 기억하기 위해 시작하였다. + 끝을 보기 위해서.. 어제오늘은 대략적인 화면 UI 구성과 api 통신을 구현하였다. 메인화면 Todo UI 저장소 추가 화면 UI 두 화면 모두 CollectionView + Diffable Data source를 활용하였다. 왜냐하면 애플이 테이블 뷰를 사용하지 않고 컬렉션 뷰로도 리스트를 '유연하게' 구현할 수 있게 했기 때문에 이를 활용하였다. diffable data source는 기존의 reloadData 방식의 단점을 보완하고, 데이터가 변경될 때마다 애니메이션 🥰 이 자동으로 보이기 때문에 사용해보았다...
[두깃] 에러처리 (Result) async, await 처리 실패 후 completion 클로저를 사용하여 api 통신하는 코드로 다시 바꿨었는데, 에러처리를 임시방편으로 마음대로 해놨다가 enum 을 사용하여 에러를 처리하기로 했다. 요리조리 시간이 더 걸리는 것 같지만.. 공부 목적이니까..! 원래 작성했던 코드는 isFetchUserData 라는 enum 을 만들어서 [ api 통신에 성공 & 입력한 아이디가 있을 경우 성공 ] 하면 success 실패하면 failed 를 클로저로 반환했다. 그리고 실행해서 결과를 받아 success 일때 모달창을 닫고, 실패하면 alert 창을 띄워줬다. 코드 더보기 enum IsFetchUserData { case success case failed } struct UserDataManager..
[두깃] 재밌는거 하는날 진동으로 피드백 주기 예전에 스파르타에서 들었던 강의 중에 진동 피드백 줬던 생각과 자주 사용하는 카카오 앱에서 송금할때 진동 피드백을 줬던게 생각이 나서 깃허브에 이름이 존재하지 않을 때 alert 창을 띄우면서 진동으로 피드백 주기를 구현해보았다. (간단하게) 절대 collectionView 구현하기 어려워서 찾아본게 아니다. async await 실패하고 에러처리도 실패한 코드라 바꿀점이 많은 코드지만 지나가면서 깨달은 점은 메인큐에 넣지 않아도 된다는 점? let hapticNotification = UINotificationFeedbackGenerator() @objc func didPressDoneButton(_ sender: UIButton) { guard let name = self.nam..
[두깃] 오류 고치는 날 (constraint, Realm migration) constraint 오류 화면상으로는 문제가 되지 않았는데 콘솔창에 발생한 오류 [LayoutConstraints] Unable to simultaneously satisfy constraints. 동시에 만족하지 않는 제약이 있다고 한다. "", "" 상당히 친절했다. 버튼의 높이는 28인데 스택뷰의 높이는 40이라고한다. -> 스택뷰의 alignment 를 .fill 이 아니라 .center 로 바꿔주어 해결하였다. Realm migration 유저 정보를 Singleton -> Realm 으로 변경하려는데 콘솔창에 프로퍼티를 변경했다고 마이그레이션이 필요하다고 떴다. Migration is required due to the following errors 마이그레이션이 정확히 뭔지 알아보고 적용하기..
[두깃] 스토리보드 삭제, 메인화면UI 스토리보드 삭제 스토리보드를 여태 안지우고 화면 클래스 이름과 맞춰서 사용하고 있었는데 .. 원래 스토리보드 안쓸라면 그냥 지우고 사용하면 되는 것이었다. 1. Main.storyboard 삭제 (Move to Trash) 2. info.plist Application Scene Manifest > SceneConfiguration > Application Session Role > Item 0 > Storyboard Name String Main -> 삭제! ( - 눌러서 완전히 지워준다.) 3. SceneDelegate 설정 (iOS 13 이상) func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionO..
[두깃] 깃허브 유저 정보 확인하기 (2022.04.08) 유저 정보: Singleton 패턴 깃허브에서 필요한 정보가 유저이름과 저장소라서 둘다 Realm 객체로 생성하여 저장하려고 했으나 유저이름은 간단하게 저장, 확인, 수정만 할 것이라서 굳이 DB에 저장하지 않아도 된다고 생각하여.. singleton 패턴을 사용하기로 결정 -> 바보였다. Singleton 패턴은 앱 종료시 사라진다. 다시 Realm에 저장하도록 하자. Github API : 존재하는 유저인지 https://docs.github.com/en/rest/reference/users Users - GitHub Docs Users The Users API allows to get public and private information about the authenticated user. Man..
[두깃] 시작화면 UI (2022.04.07) 개인프로젝트 시작.. 런치스크린 디자인 구상은 일단 두고 필요한 기능부터 구현하기로 하였다. 우선 앱을 처음 실행했을 때 시작화면의 UI부터 구현하기로 하였다. 이번 개인프로젝트는 스토리보드 없이 코드로 구현해보기로 결심했다.. NSLayoutConstraint.activate() Constraint 를 설정하는 코드는 NSLayoutConstraint.activate() 를 사용하여 이 부분이 constraint를 잡아주는 곳이라는 가독성을 높여보았다. isActive = true 를 작성하지 않아도 된다. // MARK: titleLabel titleLabel.text = "Github의 Name을 입력해주세요." titleLabel.translatesAutoresizingMaskIntoConstra..
[iOS] CAGradientLayer (그라데이션 배경) https://developer.apple.com/tutorials/app-dev-training/creating-a-gradient-background Apple Developer Documentation developer.apple.com iOS App Dev Tutorials 끝이 보이네요! 이번엔 그라데이션 배경을 만드는 방법에 대해 알아보겠습니다. segment (Today, Future, All) 마다 그라데이션 색상을 다르게 적용해볼 것입니다. 우선 사용할 CAGradientLayer 에 대해 알아보겠습니다. CAGradientLayer A layer that draws a color gradient over its background color, filling the shape of the..