首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用UI滑块动态更改MKCircle半径

使用UI滑块动态更改MKCircle半径
EN

Stack Overflow用户
提问于 2014-09-05 01:11:56
回答 3查看 2.2K关注 0票数 2

我现在正在和MapView一起做一个项目。您可以按住Tab键并按住键来放置别针。当你选择大头针时,会出现一个具有一定半径的圆。但是现在用户应该决定圆的半径是多少。这应该可以通过UISlider来实现。

问题是,圆的半径不是动态变化的。圆圈出现了,你移动滑块,什么也不会发生。取消选择并再次选择引脚,将添加另一个具有新UISlider值的环。

当前代码:在.h文件中:

代码语言:javascript
复制
@property (retain, nonatomic) MKCircle *pinCircle;

在.m文件中:

代码语言:javascript
复制
-(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view {

    _radius.hidden= false;

    CLLocation *pinLocation = [[CLLocation alloc] initWithLatitude:[(MKPointAnnotation*)[view annotation] coordinate].latitude longitude:[(MKPointAnnotation*)[view annotation] coordinate].longitude];
    _pinCircle = [MKCircle circleWithCenterCoordinate:pinLocation.coordinate radius:_radius.value*1000];
    [_mapView addOverlay:_pinCircle];
    [_pinCircle autorelease];

}

-(void)mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)view {
    _radius.hidden= true;
    }

- (MKOverlayView *)mapView:(MKMapView *)map viewForOverlay:(id <MKOverlay>)overlay
{
    MKCircleView *circleView = [[MKCircleView alloc] initWithOverlay:overlay];
    circleView.strokeColor = [UIColor greenColor];
    circleView.fillColor = [[UIColor greenColor] colorWithAlphaComponent:0.4];
    return [circleView autorelease];
}

我知道我必须使用这个操作:

代码语言:javascript
复制
- (IBAction)radiusSliderChange:(id)sender {
    NSLog(@"Slidervalue changed");
    [self.pinCircle removeFromSuperview];
}

但这会导致以下错误:

代码语言:javascript
复制
-[MKCircle removeFromSuperview]: unrecognized selector sent to instance 0x18b919d0

根据Alejandro F. Carrera的文章,我得到了以下错误:

https://www.dropbox.com/s/saxhns992jex606/Bildschirmfoto%202014-09-04%20um%2020.20.21.png?dl=0

EN

回答 3

Stack Overflow用户

发布于 2014-09-05 02:01:38

您必须在初始化时设置为nil (pinCircle = nil;),然后必须检查以下内容:

代码语言:javascript
复制
-(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
{
   if(pinCircle != nil) // click two annotations
   {
      [_mapView removeOverlay: _pinCircle];
       _pinCircle = nil;
   }
   _radius = 100; // start value to define
   [self createCircle: view.annotation.coordinate];
}

-(void)mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)view 
{
    if(pinCircle != nil)
    {
       [_mapView removeOverlay: _pinCircle];
       _pinCircle = nil;
    }
}

- (MKOverlayView *)mapView:(MKMapView *)map viewForOverlay:(id <MKOverlay>)overlay
{
    MKCircleView *circleView = [[MKCircleView alloc] initWithOverlay:overlay];
    circleView.strokeColor = [UIColor greenColor];
    circleView.fillColor = [[UIColor greenColor] colorWithAlphaComponent:0.4];
    return [circleView autorelease];
}

你已经使用了故事板,所以你必须有像pinCircle这样的滑块变量

代码语言:javascript
复制
- (IBAction)radiusSliderChange:(id)sender {
    _radius = _slider.value;  // radius property of circle is readonly so you must create other one
    [_mapView removeOverlay: _pinCircle];
    [self createCircle:_pinCircle.coordinate];
}

- (void)createCircle:(CLLocationCoordinate)coord
{
    _pinCircle = [MKCircle circleWithCenterCoordinate:coord radius:_radius.value*1000];
    [_mapView addOverlay:_pinCircle];
    [_pinCircle autorelease];
}
票数 2
EN

Stack Overflow用户

发布于 2014-09-05 01:24:53

你可以在.h文件中访问你的MKCircle *pinCircle,然后像"self.pinCircle“一样访问它。在此之后,您将能够使用[self.pinCircle removeFromSuperview];删除它。:-)

票数 1
EN

Stack Overflow用户

发布于 2016-06-28 16:53:33

在滑块值更改后,您需要删除之前添加的覆盖。

代码语言:javascript
复制
  - (IBAction)sliderForJixRadiusValueChanged:(id)sender {
    //    self.mapSelectorManager.circleRadius = self.sliderForJixRadius.value;

        [_mapView removeOverlays:arrOverlay];

        MKCircle *circle= [MKCircle circleWithCenterCoordinate:_droppedAt1 radius: (_sliderForJixRadius.value)*10000];
        [_mapView addOverlay:circle];
        [arrOverlay addObject:circle];
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25671328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档