2016-06-22 18 views
2

私はmapbox-iOS-SDK 3.2.3を使用しています。マップの境界を制御するために、このようなプロパティやsmthを見つけることはできません。私はユーザーの可視領域を制限する必要があります。現在のSDKバージョンでは可能ですか?マップボックス内のマップ境界を制限する方法MGLMapView?

+0

私は私はあなたが何をしようとして理解していません。 –

+0

地図の境界を設定して、たとえば1つの都市のみを表示したいとします。したがって、ユーザーはこの地図でズーム、パン、および通常の作業を行うことができますが、限られたエリアでのみ行うことができます。 – ShurupuS

+0

Mapboxには現在、ソリューションが組み込まれているようです:https://www.mapbox.com/ios-sdk/examples/constraining-gestures/ – Stonetip

答えて

3

マップボックスの現在のバージョンには、あなたが望むように見えるものは何もありません。あなたは

  1. マップビューのデリゲートにこれらの方法では
  2. mapViewRegionIsChanging:mapView:regionDidChangeAnimated:を実装することで、それのような何かを得る現在の領域をチェックすることができるかもしれません。目的のエリアの外にある場合は、マップビューを目的の地域の中にリセットします。つまり、マップビューが地域外に移動し始めるとすぐに、地図ビューを元に戻します。

これはおそらく動作しますが、ユーザーがターゲット領域の外側をスクロールしようとすると、ビューが「stutter」になる可能性があります。私はあなたのアプリが何かを知っていませんが、(a)これが実際に必要かどうか、そして(b)マップビューのスクロールを制限するよりも、どんな問題も避けるための良い方法があるかどうかを検討する価値があるかもしれません。

+0

私が見てきたように、問題はMapKitと同じくらい広く、まったく同じです。さて、私はデリゲートメソッドを使用してこれを解決しようとします。残念ながら、それは顧客からの地図フレームワークにとっての主要な要件の1つです。ご協力いただきありがとうございます! – ShurupuS

+1

これは、オープンソースのフレームワークですので、あなたは常にあなた自身のデリゲートメソッド(多分 'shouldMapViewRegionChange'メソッドを追加)、またはあなたが望む結果を得るために他の手段を追加することに見ることができます。 –

2

私は@Tom Harringtonからアイデアを取り、知られているMapboxの範囲内でユーザーを維持しながら、どれくらいの吃音やアニメーションのジャンク感があるかを目指してデリゲートを実装しました。私は彼の答えを否定しましたが、この例を分かち合いたいと思っていました。ここで

が主な目標は、経験がまだ顧客に喜ばれるかどうかをテストすることです mapViewRegionIsChanging

  • のデリゲートを記入スウィフトデリゲートである(はい)
  • は、デリゲートは、適切にユーザーを保つことができますデリゲートをあまりにも頻繁に呼び出すことなく範囲内で?
  • MGLCoordinateBounds
  • のみチェック平方Mapboxとして、バルボアパークを使用します(まだ検証される必要がある)場合は、顧客のスクロールすぎ
  • の概念が遠すぎるは、いくつかの許容範囲でチェックされ、epsilon
  • 4辺は簡単であるべき範囲外をチェック

    func mapViewRegionIsChanging (mapView: MGLMapView) { 
    
        let viewBounds = mapView.visibleCoordinateBounds 
    
        // Set the map's bounds to Balboa Park, San Diego 
        let boundsBalboaPark = MGLCoordinateBounds(
        sw: CLLocationCoordinate2D(latitude: 32.71942, longitude: -117.15914), 
        ne: CLLocationCoordinate2D(latitude: 32.74093, longitude: -117.13374)) 
    
        let deltaNorth = viewBounds.ne.latitude - boundsBalboaPark.ne.latitude 
    
        let epsilon = 0.025 // Magic number for tolerance of how far 'north' we allow (in degrees); Q.E.D meters 
        if(deltaNorth > epsilon) { 
        mapView.setVisibleCoordinateBounds(boundsBalboaPark, animated: true) 
        } 
    } 
    

このアニメーションは、地図ビューをバルボアパークから北に向かって移動しすぎていることを示しています。あなたが見る吃音は現実ですが、受け入れられます。

enter image description here

+0

私の代わりに元の中心位置へのジャンプを、あなたが希望範囲内に収まるようにバックだけで十分なジャンプができることをお勧めしたいです。それは飛躍を大幅に減らすでしょう。 –

+0

私は同意するものとします。そして、もう一つの良いアイデアは、顧客が自分自身を再配向の経験を得ることができるので、ビュー最小ズームをアニメーション化することです。 – RobLabs

関連する問題