2012-04-05 42 views
8

Tôi có hai tùy chọn lớp phủ trong bản đồ của tôi: MKCircleOverlay và MKPolygonOverlay. Đầu tiên là với bán kính biến, được điều khiển thông qua UISlider.Cuối cùng là tùy chỉnh tùy thuộc vào số lượng và vị trí của các góc. nhanh chóng bán kính của vòng tròn (giảm giá trị của UISlider) đôi khi lớp phủ của tôi biến mất (vòng tròn) và sau đó đa giác không thể được rút ra nữa (tất nhiên vòng tròn quá) .Không bị rơi của ứng dụng. Nó có thể là gì?MKOverlay đôi khi biến mất

Dưới đây là một số mã tôi sử dụng:

- (IBAction) addCircle:(id)sender 
{ 
slider.hidden = NO; 
slider.transform = CGAffineTransformMakeRotation(M_PI*(-0.5)); 

_longPressRecognizer= [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPress:)]; 
_longPressRecognizer.minimumPressDuration = 1.0; 

[mapview addGestureRecognizer:_longPressRecognizer]; 
[_longPressRecognizer release]; 
} 

- (void)handleLongPress:(UIGestureRecognizer *)gestureRecognizer 
{ 
if (gestureRecognizer.state != UIGestureRecognizerStateBegan) 
    return; 
CGPoint touchPoint = [gestureRecognizer locationInView:mapview];  
CLLocationCoordinate2D touchMapCoordinate = [mapview convertPoint:touchPoint toCoordinateFromView:mapview]; 

MKPointAnnotation *pa = [[MKPointAnnotation alloc] init]; 
pa.coordinate = touchMapCoordinate; 
pa.title = @"Circle Based Search"; 

[mapview addAnnotation:pa]; 
[pa release]; 

tmC = touchMapCoordinate; 
double radius = 1000.0; 

self.circleOverlay = [MKCircle circleWithCenterCoordinate:tmC radius:radius]; 
[mapview removeOverlays:[mapview overlays]]; 
[mapview addOverlay:circleOverlay]; 
[mapview removeAnnotations:[mapview annotations]]; 
} 


-(MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id)overlay 
{ 
if ([overlay isKindOfClass:[MKCircle class]]) 
{ 
    MKCircleView* circleView = [[MKCircleView alloc] initWithOverlay:overlay] ; 
    circleView.fillColor = [UIColor blueColor]; 
    circleView.strokeColor = [UIColor blueColor]; 
    circleView.lineWidth = 5.0; 
    circleView.alpha = 0.20; 
     return circleView; 
} 
else 
    if ([overlay isKindOfClass:[MKPolygon class]]) 
{ 
    MKPolygonView *polygonView = [[MKPolygonView alloc] initWithOverlay:overlay ]; 
    polygonView.fillColor = [UIColor blueColor]; 
    polygonView.strokeColor = [UIColor blueColor]; 
    polygonView.lineWidth = 5.0; 
    polygonView.alpha = 0.20; 
    return polygonView; 
} 
return [kml viewForOverlay:overlay]; 
} 

- (void)addCircleWithRadius:(double)radius 
{ 
self.circleOverlay = [MKCircle circleWithCenterCoordinate:tmC radius:radius]; 
[mapview removeOverlays:[mapview overlays]]; 
[mapview addOverlay:circleOverlay]; 
[mapview removeAnnotations:[mapview annotations]]; 
} 

- (IBAction)sliderChanged:(UISlider *)sender 
{ 
    double radius = (sender.value); 
[self addCircleWithRadius:radius]; 
[mapview removeAnnotations:[mapview annotations]]; 
} 
+0

Vui lòng cho chúng tôi biết mã bạn đang sử dụng để thay đổi kích thước vòng kết nối. Cho đến khi chúng ta thấy rằng chúng ta chỉ có thể đoán được điều gì có thể xảy ra. – sosborn

+0

Chỉ cần thực hiện, xin lỗi vì điều đó, tôi quên hoàn toàn để thêm mã. – Hari

+0

Bạn nên NSLog bán kính trong thanh trượt của bạnThay đổi để xem nó có trả về những gì bạn mong đợi hay không. Đồng thời đăng nhập giá trị tmc để đảm bảo rằng trung tâm đang ở nơi bạn mong đợi nó ở lại. Bạn không chắc về cấu trúc mã, nhưng bạn có thể kích hoạt trình nhận dạng cảm ứng dài khi bạn di chuyển thanh trượt chậm. – sosborn

Trả lời

3

Vấn đề solved.It là một cái gì đó với UISlider, trong nib, trong thanh tra của thanh trượt dưới Values tài sản Continuous là checked.After Tôi bỏ chọn đó, vấn đề đã được giải quyết.

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