2017-01-02 2 views
5

Я хочу, чтобы добавить эффект размытия в mapbox.when первой загрузки времени на карту, что время только отображать текущее местоположение на карте другой карты blue.see скриншотДобавить эффект размытия на MapBox

enter image description here

, когда я двигаю userlocation в другое место, чем в другом месте ясно, на дисплее map.also аннотацию в определенном месте увидеть скриншот

enter image description here

помочь мне, как можно реализовать т его

здесь я буду некоторые реализовать код

- (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); 

} 

В этом коде я получу идеальные точки зрения пикселя UserLocation coordinate.after я хочу, чтобы очистить пятно в виде, используя CGPoint, но я не могу получить it.i Думаю, я создам массив CGPoint, а не буду использовать линию для размытия зрения, но я не могу получить ее, предлагая мне.

я также использовать этот LIB, но я не могу получить идею много https://github.com/DenHeadless/Shapes

ответ

3

согласно логике, я добавил в моем комментарии here меня сделал образец для вас download it here, проверьте результат ниже

enter image description here

Образец содержит следующую логику.

  1. Использование IOS Карты, добавлен настраиваемая UIView выше класс карты для UIView является DrawView, который фактически обрабатывает все рисование и стирая часть.
  2. У нас есть CLLocationManager для того, чтобы определить движение пользователя.
  3. Как только CLLocationManager начала давать места, мы преобразуем координаты с относительно MapView контактном местоположения, используя следующий код

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

    и проходим CGPoint, который преобразованное значение для UIView, чтобы очистить область в рисование как

    [self.drawView eraseAtPoint:pt]; 
    
  4. Когда CGPoint от пользователя координат передаются функции DrawView eraseAtPoint стирает область определенного радиуса, и очищает область как wante д.

  5. Я добавил образец directions.gpx файл для имитации местоположения GPS, образец GIF показывает движение.

Примечание: Ссылки на проект истекает после 14 марта 2017 года, поэтому держать его загрузку, в любом случае, если вы хотите, образец снова пинг в комментарии. Не стесняйтесь делать изменения по мере необходимости.

Update:

Добавление возможности стереть область в кругах вместо квадратов, просто заменить функцию drawRect в DrawView с кодом ниже

- (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; 
} 

Приветствия.

+0

в MapBox я получу неправильный CGPoint (CGPoint) пт = (х = +1040634,6362283671, у = -389230,46748177585) – iOS

+0

@Jigar Я понятия не имею, о 'MapBox', что вы можете сделать, это держать IOS карту в целях скрытых и получите правильное вычисление, позиция gps по-прежнему будет перемещаться по карте MapBox, просто идея. Вы всегда можете копаться в классах MapBox, учебном пособии и форуме, чтобы найти ответ, основная идея вашего решения есть в примере, это способ сделать это. – iphonic

+0

http://stackoverflow.com/questions/9711248/cut-transparent-hole-in-uiview Я попробую этот код для создания круга. И я получил его, но создаю только один круг, не кратный, мне нужно создать несколько кругов вместо прямоугольника если у вас есть идея, чем сказать мне – iOS

Смежные вопросы