본문 바로가기

분류 전체보기

(273)
[iOS] No4. Scale up 기본 애니메이션에 변화 주기 with AnchorPoint + 발생 가능한 에러 해결하기 안녕하세요. JourneyOfFaith 앱을 개발하며 4번째 포스트를 작성하게 되었습니다. 이번에는 BorderAnchor를 통해 연필로 밑줄을 긋는 효과인, 제가 원했던 시작점에서 도달점까지 보여지는 애니메이션 효과를 주는 방법에 대해 소개하려구 합니다!  화면 소개 여기 빨간색 점선 영역 안에 초록색이 맨 처음 보여질 때 빨간색 영역 왼쪽 엣지 부분에서부터 보여져서 오른쪽으로 커지는 애니메이션을 주려고 합니다!  이렇게 width가 0이었다가 "3일 동안" 글자 크기만큼의 width까지 underline이 자연스레 연필로 긋듯 그어지는 효과를 연출해보려구 합니다.  본격적인 애니메이션NSUnderline에서 지원하는 여러 style보다 thickness가 좀 커져야 했었어서 저는 Layer를 추가했습..
[iOS] No 3. 메모리 점유율 줄이기. Retain cycle 형성 원인 분석 및 해결 과정 안녕하세요!  오늘은 앱 UI 리펙터링을 하기 전에 화면을 A -> B -> A -> B 두 화면을 왔다 갔다를 반복하면서 마주한 메모리 점유율이 계단식으로 상승했던 이유와 어떻게 파악했는지 원인과 해결 과정을 소개하려고 합니다.# Memgraph# instruments - Allocations# retain cycle# lottie# functional programming 화면 소개 및 메모리 계단식 점유 발생 이슈 성경 읽기 플랜 화면은 다음과 같이 구성되어 있습니다! 처음에 들어갈 때는 메모리 관련 이슈가 없지만, 3초 간격을 두며 반복해서 형광펜, 성경 읽기 플랜 두 화면을 전환하다 보면 메모리가 계단으로 점유되는 현상을 발견했습니다.  ViewController는 deinit될 수 있지만, 그..
[iOS] No 2 Database. illegal multi-threaded access to database connection! 디비 접근 동시성 충돌 안녕하세요! 오늘은 앱 개발을 하며 마주한 오류의 원인과 해결 방법을 소개하려구 포스트를 작성했습니다.# Database multi threaded access# Serial Queue? or Concurrent Queue?# sqlite3 multi threaded access. illegal multi-threaded access to database connection 발생 이유 이 코드는 사용자가 읽은 챕터를 저장하는 유즈케이스 입니다. tracker, gardenLogRepository 변수는 내부적으로 각각 serialQueue에 async하게  작업을 추가해 데이터를 순차적으로 처리합니다.  tracker, gardenLogRepository 각각은 내부적으로 sqlite3 데이터베이스에 접..
[iOS] No 1. 컬랙션 뷰 동적으로 Cell 사이즈 변경 후 jumping scroll 오류 원인 분석 및 해결 방법 안녕하세요!오늘은 앱 개발을 하며 마주한 오류의 원인과 해결 방법을 소개하려구 포스트를 작성했습니다.#UICollectionView Scroll Jumping issue#UITableView Scroll Jumping error#동적 사이즈 변화시에 스크롤 버벅임 마주한 스크롤 contentOffset 이슈상황은 다음과 같습니다. 1. 사용자의 터치 이벤트가 발생하면 컬랙션뷰 내부 셀들의 크기가 동적으로 변화해야 합니다.2. 동적으로 변화된 셀 사이즈를 반영하기 위해 reloadData한 이후 스크롤 할 경우 스크롤 함에도, 스크롤 위치가 순간이동되는 현상이 발생됬습니다. Case 1. [정상적인 경우 및 로직 소개]  위 동영상은 Cell 사이즈가 변경되지 않았을 경우 정상적인 화면 동작 결과입니다. ..
[Tuist] tuist project에 마크다운(md) 파일 추가하는 방법!! Tuist를 사용하며 Project를 생성하기 위한 Target을 정의할 때 Sources 매개변수의 값으로 ["Sources/**"] 이렇게 지정한다면 마크다운(md) 파일이 타겟에 인식이 되지 않을 수 있습니다. 기본적으로 소스 코드는(.swift, .m. ,h) 등만 인식이 되고  .md파일은 resources에서 인식한다고 합니다.  이렇게 resources 경로에 md파일이 위치한 경로를 타겟 생성 전에 추가해 주면 매번 tuist generate를 만들때 README.md파일이 보인다는 사실!,, 파일명이 달라야한다면.. 이렇게 와일드카드를 사용하면 매번 generate 할 때 보여져서 좋은것 같습니다: ) 그런데 일반적인 target 생성 템플릿에 이렇게 Sources/*.md를 추가했지만,..
[Programmers][Swift] 110 옮기기 - Level3 [프로그래머스] 110 옮기기[ 링크 ]간단한 문제 요약0과 1로 이루어진 어떤 문자열 x에 대해서 x에 있는 "110"을 뽑아, 임의의 위치에 삽입합니다."를 반복하여 만들어진 x를 사전 순으로 만들자. (최대한 작은 수로 만들자)문제 풀이110을 전부 추출하고, 나머지 문자열들에 대해서 마지막 원소부터 0이 존재하는지 여부 체크 후 해당 원소 뒤에 붙이거나, 0이 없다면 110 배열을 붙인다면 사전순으로 정렬됨. 110을 추출해서 뒤로 옮기거나 앞으로 옮긴 결과.. 110이 이어져있다는게 특징이었는데 규칙 찾기가 어렵다.. 문제를 풀면서 String.Index를 적극 활용했는데 시간초과가 걸렸다.let solution: ([String]) -> [String] = { $0.map(minimize) }..
[프로그래머스][Swift] 표 편집 - Level3 프로그래머스 표 편집[링크]간단한 문제 요약명령어 기반으로 표의 행을 선택, 삭제, 복구하는 과제를 맡았다. 파란색으로 칠해진 칸이 현재 선택된 행이고, 한 번에 한 행만 선택할 수 있구 표의 범위를 벗어날 수 없다."U X": 현재 선택된 행에서 X칸 위에 있는 행을 선택합니다."D X": 현재 선택된 행에서 X칸 아래에 있는 행을 선택합니다."C" : 현재 선택된 행을 삭제한 후, 바로 아래 행을 선택합니다. 단, 삭제된 행이 가장 마지막 행인 경우 바로 윗 행을 선택합니다."Z" : 가장 최근에 삭제된 행을 원래대로 복구합니다. 단, 현재 선택된 행은 바뀌지 않습니다.문제 풀이어떻게 삭제한 정보를 가져올 수 있을까?, 어떻게 삭제하지 않은 행들만 탐색할 수 있을까?, 답 출력할 때 어떻게 행들의 삭..
[프로그래머스][Swift] 퍼즐 조각 채우기 - Level3 퍼즐 조각 채우기 [문제 링크]간단한 문제 요약 게임 보드안 빈 공간에, table에 있는 퍼즐을 적절히 올려놓아야한다. 특정한 퍼즐을 놓을 때 주변 빈 공간이 없어야한다. 퍼즐 조각은 회전시킬수있지만 뒤집을 수는 없다. 가장 많이 채웠을때 총 몇칸을 채울 수 있는가?문제 접근이 문제를 풀기 위해선 퍼즐을 회전하는 방법을 알아야 합니다.var board = ... // n*n 2차원 배열var temp = Array(repeating: Array(repeating: 0, count: n), count: n)for y in 0.. 이 경우는 n*n일때 2차원배열의 모든 원소들을 90도 회전할 때 사용됩니다.  저는 근데 좌표 회전 방법을 사용했습니다.A(a,b) -> A'(-b,a)이는 한 좌표에 대해서 ..