この動作はiOS5では表示されません。
MKMapViewにビューをオーバーレイしていますが、ユーザーが内部に触れたときに、マップビュー(setScrollEnabled:NO
)をロックしてそのUIViewのサイズを変更したいと思います。カスタムジェスチャレコグナイザーをマップビューに追加して、タッチがどこにあるかを確認しました。それがオーバーレイの外側にある場合、ユーザーはマップを移動/ピンチして領域を変更できます。
問題は、scrollEnabled
NOに設定すると、でチェックすると常に適切な値が報告されますが、NSLog
とにかくマップビューがスクロールすることです。
コード
MyViewController.m
// viewcontroller that contains the map view; this is the delegate as well
@implementation MyViewController
{
//private vars
MKMapView *_mapView;
}
//...
- (void)configTheMap
{
_mapView = //initwithframe
//add it as subview, bring it to front
[_mapView setDelegate:self]
//setup gesture recognizer
[gesture setTouchesBeganBlock:^(NSSet *touches, UIEvent *event) {
//if touch is in the circle set _mapView scrollEnabled:NO
}];
//touchesMoved, touchesEnded
[_mapView addGestureRecognizer:gesture];
}
私が言ったように、iOS 5では、これは期待どおりに機能し、定義されたポイントの内側に触れている間、マップビュー領域はロックされます。iOS 6では、信頼性が低くなります。地域がロックされたままになることもあれば、解放されたように見えることもあります。ビューを終了して戻ることはできますが、ビューがどのように機能するかを予測することはできません。touchesMovedにNSLogを追加して、のステータスを確認する_mapView
と、期待どおりscrollEnabled
に返さNO
れます。
誰か助けてもらえますか?