![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/cEDnvl/btsD0J7AC1N/qpdPc9Zk82GEUpcHedNxkK/img.png)
서버 개발자가 아니거나, 간단한 사이드 프로젝트를 하는 입장에서 백엔드를 필요로 하는 상황이 굉장히 많이 발생한다. 이를 해결해 줄 것이 바로 Google의 Firebase인데, 지금 내가 서비스 운영 중인 명언 iOS 앱 또한 간단한 명언 데이터를 수집/제공해 줄 목적으로 Firebase의 Realtime Database 서비스를 이용 중이다. 이 앱의 Android OS는 동료 개발자가 운영하고 있는데, 현재는 서비스 앱 말고도 수집된 명언 데이터를 처리하는 간단한 앱 또한 이 친구가 만들어 둬 좀 더 수월한 데이터 처리를 돕고 있었다. 이 앱을 운영한 지가 어엿 4년 차가 돼 가는데, 둘 다 소프트웨어 공학적 지식이 불충분한 상태에서 시작했기에 디자인 패턴을 고려하지 않았고, 기능을 추가할수록 코드..
1021번: 회전하는 큐 첫째 줄에 큐의 크기 N과 뽑아내려고 하는 수의 개수 M이 주어진다. N은 50보다 작거나 같은 자연수이고, M은 N보다 작거나 같은 자연수이다. 둘째 줄에는 지민이가 뽑아내려고 하는 수의 위치가 www.acmicpc.net 추가하는 건 맨 뒤에서, 빼는 건 양쪽 방향에서 해줄 수 있는 큐가 필요하다. 덱(double ended queue)을 구현해주면 되는데, 해당 문제에서는 양방향으로 추가해줄 필요가 없어서 기존에 구현했던 큐를 일부 수정, 변형하였다. 회전하는 큐 구현 struct Queue { var left = [Int]() var right = [Int]() var count: Int { left.count + right.count } var isEmpty: Bool ..
Swift같은 개발 언어 중에는 힙, 큐, 덱같이 기본적으로 다른 언어에서 제공해주는 라이브러리가 따로 있지 않다. 따라서 직접 구현해줘야 한다. 알아야 될 것 1. 완전 이진트리로 부모 노드를 탐색하려면, 시작 인덱스를 1부터 시작해야 한다. 2. 힙은 우선순위 큐를 위한 자료형이다. 3. 우선순위 큐의 목적은 값을 추가할 때 부모 노드에 최댓값 or 최솟값을 넣기 위함이다. 4. 따라서 입, 출력을 할 때만 연산이 수행되고, 전체 힙의 값을 확인하면 오름차순이나 내림차순으로 정렬되지 않을 수 있다. struct Heap { var heap: Array = [] // 초기화 1. 아무 것도 넣지 않을 때 init() { } // 초기화 2. 시작부터 넣을 때 init(_ data: [Int]) { he..
storyboard로 개발을 하는게 더 편리하고 쉽지만, 가끔은 SnapKit 라이브러리를 활용하여 코드로 화면을 짤 수도 있습니다. Project를 생성하고, 기본으로 포함되어있는데 ViewController에 바로 개발을 할 수는 있지만, 굳이 필요 없는 무거운 파일들을 앱에 포함시킬 필요는 없어요. 1. ViewController 삭제 2. Info.plist > Information Property List > Application Scene Manifest > Scene Configuration > Application Session Role > Item 0 > Storyboard Name 삭제 3. Ctrl + N -> 새로운 VC 생성 4. SceneDelegate에 해당 코드 작성 func..
금융 등 개인 정보를 담는 앱들은 백그라운드에서 앱 화면을 가리는 기능을 사용한다. iOS 13 미만을 지원하는 앱에서는 appDelegate에서, 이상의 버전을 지원하는 앱에서는 sceneDelegate에서 해당 메소드들을 구현해주자. // 액티브 상태가 되었을 경우(다시 앱으로 돌아왔을 때) func sceneDidBecomeActive(_ scene: UIScene) { callBgImage(false) } // 홈 바를 쓸어 올리거나 홈버튼을 두번 눌렀을 경우 func sceneWillResignActive(_ scene: UIScene) { } // 백그라운드 상태였다가 돌아왔을 때 func sceneWillEnterForeground(_ scene: UIScene) { callBgImage(f..
let gradientView = CAGradientLayer() gradientView.frame = bgView.bounds // bgView는 그라데이션을 덮을 superView에 해당 let colors: [CGColor] = [ // 해당 부분에 그라데이션을 넣을 색상을 입력 (오름차순으로 표현됌) ] gradientView.colors = colors // 그라데이션의 시작점과 끝점을 좌표로 표현, 0은 0을, 1은 maximum X/Y point를 의미 gradientView.startPoint = CGPoint(x: 0.5, y: 0.0) gradientView.endPoint = CGPoint(x: 0.5, y: 1.0) // 할당하면 끝 bgView.layer.addSublayer(gr..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/sYBjC/btqTyAH9PbJ/nNJ3hnHHUrgTeaSN66npLk/img.png)
구글 애드몹을 연동해놓은 앱이 있는데 해당 앱이 국내 유저 기반이기도 하고, 카카오 애드핏 광고가 더 예쁘고 가지런해 보이더군요. 그래서 구글 애드몹을 버리고(?) 카카오 애드핏으로 갈아타기로 마음먹었습니다. 확실히 구글 애드몹이 사용자 수가 많아서인지 금방 구현하는 법을 찾을 수 있었는데 카카오 애드핏은 없어서 구현하는 김에 포스팅을 작성해보렵니다. 해당 포스팅은 카카오 애드핏 공식 GitHub 문서를 참고하여 작성하였습니다. https://github.com/adfit/adfit-ios-sdk/wiki/배너-광고-연동 1. 먼저 카카오 애드핏 사이트에 접속, 가입(카카오 계정 연동 가능) 해주시고, 아래 절차를 밟으시면 됩니다. 광고 단위명은 그냥 사용자 마음대로 설정하시면 돼요. * 현재 앱에서는 ..
- Total
- Today
- Yesterday
- D3
- swift
- Array
- 정보시각화
- how to remove border of tabbarcontroller
- BOJ
- Python
- 보라매사옥
- PS
- 곱셈의 역원
- 백준
- 알고리즘
- SVG
- SceneDelegate
- 자료구조
- ios
- 백트래킹
- 파이썬
- xcode
- how to start without storyboard
- HTML
- TIP
- pyrebase
- Javascript
- 하노이탑이동순서
- CSV
- c++
- DP
- CSS
- DFS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |