I\'ve noticed that if I use MKMapView\'s selectAnnotation:animated:, that it will scroll my map off screen if the MKAnnotation is not displayed in the current MKCoo
Use the annotationsInMapRect: method in the MKMapView class. It returns a NSSet of all annotation objects that are visible in the given map rect. Use the containsObject: method of NSSet to test if the annotation is present in that set of visible annotations.
MKMapRect visibleMapRect = aMapView.visibleMapRect;
NSSet *visibleAnnotations = [aMapView annotationsInMapRect:visibleMapRect];
BOOL annotationIsVisible = [visibleAnnotations containsObject:someAnnotation];
Also visibleMapRect is same as the region but just a different form of representation. Take from the docs,
visibleMapRectThe area currently displayed by the map view.
@property(nonatomic) MKMapRect visibleMapRectThis property represents the same basic information as the region property but specified as a map rectangle instead of a region.