포스트

킥보드 프로젝트 3일차

프로젝트 3일차 각 팀원분들이 올려준걸 머지를 어떻게 하는지 알려주고나니 슬슬 틀이 잡혀지는게 보인다.

약간의 추가기능 느낌이지만, 이부분은 어떻게 보면 나름 필수 기능이라고 생각해서 이부분에 대해 작성을 해보려 한다.

현재위치에서 가장 가까운 Marker와의 거리를 구하는 로직 구현.

1
2
3
4
let pins = mapView.annotations
let currentLocation = mapView.userLocation.location
        
print(pins.count)

우선 다음과 같이 했다.

그리고 Annotation을 추가할때마다 몇개가 출력이 되는지 확인을 하기위해 print를 사용하여 개수를 확인했다.

아무것도 없는데 개수가 1이 뜨는것으로 보아.

현재 유져의 위치를 알려주는것도 annotation으로 포함을 하는것 같다.

작성된 코드를 확인해 보아도 Annotation 추가에 관한 내용는 테스트로 둔 Addpin 버튼밖에 없다.

코드를 좀 더 구현했다.

1
2
3
4
5
6
7
8
 pins.forEach { pin in
            if let distance = currentLocation?.distance(from: CLLocation(latitude: pin.coordinate.latitude, longitude: pin.coordinate.longitude)) {
                array.append(distance)
                print(array)
                print("=====")
                print(array.min() ?? 0)
            }
        }

이렇게 하고 최소값을 찍으려하니 문제를 알았다.

1
2
3
4
5
6
7
8
9
[0.0, 511.98378656402537]
=====
0.0
[0.0, 511.98378656402537, 113.42895215161697]
=====
0.0
[0.0, 511.98378656402537, 113.42895215161697, 540.4131619778344]
=====
0.0

이게 출력한 결과중 일부인데, 현위치도 마커로 인식하기때문에 무조건 최소값은 0이 찍히는게 당연했다.

그래서 배열을 오름차순 정렬을 하게 한뒤에 첫번째 인덱스의 값을 가져오게 했다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 @IBAction func getDistance(_ sender: UIButton) {
        
        let pins = mapView.annotations
        let currentLocation = mapView.userLocation.location
        
        var array: [Double] = [Double]()
        
        pins.forEach { pin in
            if let distance = currentLocation?.distance(from: CLLocation(latitude: pin.coordinate.latitude, longitude: pin.coordinate.longitude)) {
                array.append(distance)
            }
        }
        array.sort(by: <)
        print(array[1])
    }
    

완료.

TabBar 연결.

프로젝를 진행하면서 처음에 TabbarVC가 있었는데, 그게 어느순간 사라진것알았다.

TabbarViewController를 하나 만들어주고, Items(Tabbar VC를 생성하면 자연스럽게 추가되는 VC)를 전부 지워주고

탭바로 연결하려고 하는 VC를 Link하듯 컨트롤을 누르고 드래그 해주면 된다.

CleanShot 2024-04-29 at 03 02 41@2x

Apr-29-2024 03-04-02

그리 어렵지는 않다. 그리고 초기화면과 기타 설정을 해주기 위해 TabbarVC Class도 만들어 준다.

그리고 팀원분이 만드신 회원가입페이지에서 TabbarVC로 화면전환을 시킨다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// SingupVC
if let tabVC = self.storyboard?.instantiateViewController(withIdentifier: "tapVC") as? TabbarViewController {

                self.navigationController?.pushViewController(tabVC, animated: true)
            } else {
                print("NextViewController를 인스턴스화할 수 없습니다.")
            }

// Tabbar Controller
import UIKit

class TabbarViewController: UITabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()

        self.selectedIndex = 0
        self.navigationController?.isNavigationBarHidden = true
    }

}

처음에 선택되는건 지도로 하기위해 인덱스를 0으로 설정하고,

NavigationBar Button을 보이지 않게 하기위해 hidden을 설정한다.

이렇게 되면 회원가입을하면 TabbarVC로 가게 되고 TabbarVC중 item index가 0인건 지도이므로 바로 지도화면을 보이게 된다.

오늘은 내 기능보다 팀원분들을 도와준게 더 많았기에 여기서 마무리

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.