2017-01-02 17 views
5

Tôi muốn thêm hiệu ứng mờ ảo trong mapbox.when tải lần đầu tiên bản đồ thời điểm đó chỉ hiển thị vị trí hiện tại trên bản đồ bản đồ khác là blue.see screenshotThêm hiệu ứng mờ trên Mapbox

enter image description here

khi tôi di chuyển các userlocation đến một vị trí khác so với vị trí khác là rõ ràng về các chú thích hiển thị map.also ở địa điểm cụ thể thấy ảnh chụp màn hình

enter image description here

giúp tôi làm thế nào có thể thực hiện t mình

đây tôi một số sẽ thực hiện các mã

- (CGPoint)convertLatLongCoord:(CGPoint)latLong { 
    CGSize screenSize = [UIScreen mainScreen].applicationFrame.size]; 
    CGFloat SCALE = MIN(screenSize.width, screenSize.height)/(2.0 * EARTH_RADIUS); 
    CGFloat OFFSET = MIN(screenSize.width, screenSize.height)/2.0; 
    CGFloat x = EARTH_RADIUS * cos(latLong.x) * cos(latLong.y) * SCALE + OFFSET; 
    CGFloat y = EARTH_RADIUS * cos(latLong.x) * sin(latLong.y) * SCALE + OFFSET; 

    return CGPointMake(x, y); 
} 

-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations 
{ 
    NSLog(@"data=%f",self.mapview.userLocation.coordinate.latitude); 
    CLLocation *currentLoc=[locations objectAtIndex:0]; 
    _coordinate=currentLoc.coordinate; 
CGPoint latLong = {_coordinate.latitude, _coordinate.longitude}; 
    oldcord = [self convertLatLongCoord:latLong]; 
    NSLog(@"Cartesian Coordinate: (%f, %f)",oldcord.x, oldcord.y); 

} 

trong mã này tôi sẽ nhận được hoàn hảo điểm xem điểm ảnh của UserLocation coordinate.after tôi muốn xóa mờ theo quan điểm sử dụng CGPoint nhưng tôi không thể nhận được nó.Tôi nghĩ rằng tôi sẽ tạo ra mảng của CGPoint và rõ ràng hơn bằng cách sử dụng dòng để làm mờ xem nhưng tôi không thể có nó pls đề nghị tôi.

tôi cũng sử dụng lib này nhưng tôi không thể có được ý tưởng để nhiều https://github.com/DenHeadless/Shapes

Trả lời

3

theo logic tôi đã thêm vào trong bình luận của tôi here Tôi có làm một mẫu cho bạn download it here, kiểm tra kết quả dưới đây

enter image description here

Mẫu chứa logic sau.

  1. Sử dụng iOS Bản đồ, thêm một UIView Tuỳ chỉnh trên bản đồ lớp cho UIView là DrawView mà thực sự xử lý tất cả các bản vẽ và phần xóa.
  2. Chúng tôi đang có CLLocationManager tất nhiên để xác định chuyển động của người dùng.
  3. Ngay sau khi CLLocationManager bắt đầu đưa ra địa điểm, chúng tôi chuyển đổi tọa độ đối với các vị trí MapView pin với việc sử dụng đoạn mã sau

    CGPoint pt=[self.map convertCoordinate:location.coordinate toPointToView:self.view]; 
    

    và chúng tôi vượt qua CGPoint mà là giá trị chuyển đổi cho UIView để xóa khu vực trong vẽ như

    [self.drawView eraseAtPoint:pt]; 
    
  4. Khi CGPoint từ người dùng của phối hợp được thông qua vào DrawView eraseAtPoint hàm chúng ta xóa một khu vực bán kính xác định, và nó gạt bỏ khu vực này như wante d.

  5. Tôi đã thêm tệp mẫu directions.gpx để mô phỏng vị trí GPS, mẫu GIF hiển thị chuyển động.

Lưu ý: liên kết cho dự án sẽ hết hiệu lực sau 14 tháng 3 năm 2017, vì vậy giữ cho nó tải về, trong mọi trường hợp nếu bạn muốn mẫu một lần nữa ping trong nhận xét. Vui lòng thực hiện các sửa đổi nếu bạn cần.

Cập nhật:

Thêm khả năng để xóa khu vực trong vòng tròn thay vì hình vuông, chỉ cần thay thế các chức năng trong drawRectDrawView với mã dưới đây

- (void)drawRect:(CGRect)rect {  

    // Drawing code 
    UIColor *backgroundColor=[UIColor colorWithRed:0.85 green:0.85 blue:0.85 alpha:1.0f];//Grey 

    [backgroundColor setFill]; 
    UIRectFill(rect); 

    if(!self.initialLoad){//If the view has been loaded from next time we will try to clear area where required.. 

     // clear the background in the given rectangles 
     for (NSValue *holeRectValue in _rectArray) { 
      CGContextRef context = UIGraphicsGetCurrentContext(); 

      CGRect holeRect = [holeRectValue CGRectValue]; 

      [[UIColor clearColor] setFill]; 

      CGRect holeRectIntersection = CGRectIntersection(holeRect, rect); 

      CGContextSetFillColorWithColor(context, [UIColor clearColor].CGColor); 
      CGContextSetBlendMode(context, kCGBlendModeClear); 

      CGContextFillEllipseInRect(context, holeRectIntersection); 

     } 
    } 

    self.initialLoad=NO; 
} 

Cheers.

+0

trong mapbox tôi sẽ bị sai cgpoint (CGPoint) pt = (x = 1040634.6362283671, y = -389230.46748177585) – iOS

+0

@Jigar Tôi không biết gì về 'MapBox', những gì bạn có thể làm là giữ Bản đồ iOS ở chế độ ẩn và có được quyền tính toán, vị trí gps sẽ vẫn di chuyển trên bản đồ MapBox của bạn, chỉ là một ý tưởng. Bạn luôn có thể đào sâu vào các lớp MapBox, hướng dẫn và diễn đàn để tìm câu trả lời, ý tưởng cơ bản về giải pháp của bạn là có trong mẫu, đây là cách thực hiện nó. – iphonic

+0

http://stackoverflow.com/questions/9711248/cut-transparent-hole-in-uiview tôi sẽ thử mã này để tạo vòng tròn. Và tôi đã nhận nó nhưng chỉ tạo ra một vòng tròn không nhiều tôi cần tạo nhiều vòng tròn thay vì hình chữ nhật nếu bạn có một số ý tưởng hơn cho tôi biết – iOS

Các vấn đề liên quan