我现在正在和MapView一起做一个项目。您可以按住Tab键并按住键来放置别针。当你选择大头针时,会出现一个具有一定半径的圆。但是现在用户应该决定圆的半径是多少。这应该可以通过UISlider来实现。
问题是,圆的半径不是动态变化的。圆圈出现了,你移动滑块,什么也不会发生。取消选择并再次选择引脚,将添加另一个具有新UISlider值的环。
当前代码:在.h文件中:
@property (retain, nonatomic) MKCircle *pinCircle;在.m文件中:
-(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];
}我知道我必须使用这个操作:
- (IBAction)radiusSliderChange:(id)sender {
NSLog(@"Slidervalue changed");
[self.pinCircle removeFromSuperview];
}但这会导致以下错误:
-[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
发布于 2014-09-05 02:01:38
您必须在初始化时设置为nil (pinCircle = nil;),然后必须检查以下内容:
-(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这样的滑块变量
- (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];
}发布于 2014-09-05 01:24:53
你可以在.h文件中访问你的MKCircle *pinCircle,然后像"self.pinCircle“一样访问它。在此之后,您将能够使用[self.pinCircle removeFromSuperview];删除它。:-)
发布于 2016-06-28 16:53:33
在滑块值更改后,您需要删除之前添加的覆盖。
- (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];https://stackoverflow.com/questions/25671328
复制相似问题