포스트

킥보드 프로젝트 5일차

Test용 Dummy Data생성

기능 구현도 막바지 언제까지 계속 버튼으로 테스트용 핀버튼 눌러가며 할수는 없기에

DummyData를 만들어본다.

시뮬레이터를 쓸때 움직이는걸 확인하려면 어쩔수없이 기준을 Apple로 해야하기에

Apple의 위도, 경도를 기반으로 만들어 본다.

우선 간단한 모델링을 해주었다.

1
2
3
4
5
6
7
8
import Foundation

struct PinModel {
    
    var x: Double
    var y: Double
    var id: String
}

x,y,id 이렇게 3개를 했다.

우선 id값은 처음에 int로 숫자만 하려다가. 그냥 알파벳숫자 모두가 섞인 값이 더 나을것이라고 판단하였다.

10자리로 값을 무작위로 추출하게 고차함수를 이용하고,

검색해보니 1km의 위도, 경도 값이 있어서 처음에는 1km로 했다가 생각보다 범위가 너무 넓어서 250m로 줄였다.

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
32
33
34
35
36
37
class CoordGenerator {
    
    func makingDummyArray() -> [PinModel] {
        var list = [PinModel]()
        
        for _ in 0 ... 20 {
            let model = PinModel(x: lonlatGenerator().0, y: lonlatGenerator().1, id: serialGenerator())
            list.append(model)
        }
        
        return list
    }
    
    // 10자리의 랜덤한 SerialNumber를 만들어줌
    func serialGenerator() -> String {
        let letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
        let madeString = String((0 ..< 10).map{ _ in letters.randomElement()! })
        return madeString
    }
    
    func lonlatGenerator() -> (Double, Double) {
        
        // 시뮬레이터 기반 Apple 지역 위도,경도
        let defaultLon = -122.030189
        let defaultLat = 37.331676
        // 위도,경도를 250m 환산했을때의 값
        let lonKm = 0.002825
        let latKm = 0.002275
        
        // 애플의 위도,경도를 기준으로 +,- 1km 범위의 랜덤 값을 추출
        let x = Double.random(in: (defaultLon - lonKm ... defaultLon + lonKm))
        let y = Double.random(in: (defaultLat - latKm ... defaultLat + latKm))
        
        return (x, y)
    }
   
}

그리고 해당 기능을 사용할 mapvc로 가서

1
2
3
4
5
6
func makingDummy() {
        for i in dummyArray.indices {
            let coordinate = CLLocationCoordinate2D(latitude: dummyArray[i].y, longitude: dummyArray[i].x)
            addMark(coordinate: coordinate, serial: dummyArray[i].id)
        }
}

이렇게 구현을 했다. 이때 addMark 함수는 좌표값만 parameter로 받았는데, serial값도 부여하기 위해 변경해줬다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
func addMark(coordinate: CLLocationCoordinate2D, serial: String) {
        
        let pin = MKPointAnnotation()
        let address = CLGeocoder.init()
        address.reverseGeocodeLocation(CLLocation(latitude: coordinate.latitude, longitude: coordinate.longitude)) { (placemarks, error) in
            var placeMark: CLPlacemark!
            placeMark = placemarks?[0]
            
            guard let address = placeMark else { return }
            
            pin.title = "기기번호: \(serial)" // modified
            pin.subtitle = "현재위치: \(address.thoroughfare ?? "Apple Store")"
            
            pin.coordinate = coordinate
            self.mapView.addAnnotation(pin)
        }

    }

예외처리도 하였지만 너무 한게 많아서 기억이 나질 않는다.

Simulator Screenshot - iPhone 15 Pro - 2024-04-27 at 03 31 15

정보 view 생성

이건 키오스크에서 내가 구현했던걸 그대로 가져왔다.

그래서 자세한 설명은 패스.

거의 그대로 내가 썼던걸 사용했고,

단지 UITapGestureRecognizer 를 통해 호출하게 하였다.

Apr-29-2024 05-28-04

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