2010-11-07 32 views
12

Điều này khiến tôi thất vọng !!!MKMapView regionDidChangeAnimated không phải lúc nào cũng được gọi!

Nó sẽ được gọi là hầu hết thời gian nhưng sau đó nó dừng đáp ứng với các pinches. Nó sẽ được gọi là xoay màn hình và nhấn đúp. Không để một pinch!

Trợ giúp!

+1

Bạn đã từng có giải pháp cho điều này chưa ? – thekevinscott

+0

Có một số thảo luận về điều này trong diễn đàn của Apple: https://devforums.apple.com/message/525411 –

+0

Nếu bạn đang sử dụng chế độ xem chú thích tùy chỉnh thực hiện thao tác chạm riêng, hãy xem cuộc thảo luận này: http: // www.iphonedevsdk.com/forum/iphone-sdk-development/79199-regiondidchangeanimated-not-always-firing.html –

Trả lời

7

Tôi đang làm việc trên một số mã có cùng vấn đề và chỉ ra vấn đề là một tiểu sử với UIGestureRecognizer đã được thêm làm tiểu sử cho MKMapView và đôi khi, chúng sẽ khiến một số phương pháp đại biểu không kích hoạt.

Vì vậy, hãy đảm bảo bạn không thêm các bản xem trước hoặc bất kỳ thứ gì vào MKMapView.

Hy vọng điều này sẽ hữu ích.

3

Tôi đã di chuyển bản đồ trong mã và sau đó nó xuất hiện tôi cần phải gọi

[mapView setNeedsDisplay]; 

Sau!

+0

Thực ra vẫn chưa xảy ra! –

1

Tôi nghĩ rằng sự cố này có thể liên quan đến đa luồng.

Tôi đã gặp vấn đề tương tự sáng nay. Tôi sử dụng trình nhận dạng cử chỉ để nắm bắt sự kiện báo chí dài và sau đó thêm ghim vào chế độ xem bản đồ. Nếu hoạt động tốt nhưng sau một vài vòng, khu vực đã thay đổi phương pháp ngừng được gọi.

Tôi đã thử một vài giải pháp ở đây nhưng không có giải pháp nào hoạt động. Sau đó, tôi nhớ lại một số vấn đề khác mà tôi đã có trước đây với tính chất đa luồng của các hành động. Vì vậy, tôi cố gắng di chuyển mã kiểm soát mapview trong hành động báo chí dài đến một khối chạy trong chuỗi chính. Và vấn đề được giải quyết.

0

tôi quản lý để giải quyết vấn đề này bằng cách vô hiệu hóa nhận dạng cử chỉ trong touchesBeganCallback

self.tapInterceptor.touchesBeganCallback = ^(NSSet *touches, UIEvent *event) { 
    self.tapInterceptor.enabled = NO; 
    // do something 
}; 

và reenabling nó trong regionDidChangeAnimated phương pháp đại biểu

- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated { 
    self.tapInterceptor.enabled = YES; 
    // do something 
} 
0

Bất cứ khi nào một trình nhận dạng vòi cử chỉ thêm vào MapView, thiết lập

recognizer.cancelsTouchesInView = NO; 

đảm nhiệm o f vấn đề nếu logic kinh doanh của bạn cho phép xử lý kép nếu chạm vào mapview (bởi MKMapView VÀ bộ nhận dạng cử chỉ gần đây nhất đã can thiệp vào khu vực [Will, Did] ChangeAnimated :)

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