私は本当にfoursquareの会場の詳細を見るのが大好きです。特にビューの "ヘッダー"に会場の場所を持つマップ...どのように行われたのですか?詳細は明らかにいくつかのuiscrollview(おそらくuitableview?)とその背後に(ヘッダー内に)マップがあるので、スクロールビューがバウンスするとbeeing beeing beeingです...誰もこれを行う方法を持っていますか?新しいフォースクエア会場の詳細マップ
答えて
ここで私はそれを再現するために管理する方法です: -
あなたは、そのビューとしてUIScrollView
とUIViewController
を必要としています。
- - MKMapView
が負y
位置を持ってのフレーム:次に、UIView
あなたはscrollviewに追加の内容は次のようになります。この場合、デフォルト状態(ドラッグする前)で100ptの地図しか見ることができません。
- MKMapViewインスタンスのズームとスクロールを無効にする必要があります。
次に、下にドラッグしたときにのcenterCoordinate
を下に移動し、その中心位置を調整することです。そのため
は、我々は、画面上のX点のドラッグされたときに中心が移動すべき地図の座標をどのくらい知っているように、デルタ緯度として表すどのくらい1点計算: -
- (void)viewDidLoad {
[super viewDidLoad];
UIScrollView* scrollView = (UIScrollView*)self.view;
[scrollView addSubview:contentView];
scrollView.contentSize = contentView.frame.size;
scrollView.delegate = self;
center = CLLocationCoordinate2DMake(43.6010, 7.0774);
mapView.region = MKCoordinateRegionMakeWithDistance(center, 1000, 1000);
mapView.centerCoordinate = center;
//We compute how much latitude represent 1point.
//so that we know how much the center coordinate of the map should be moved
//when being dragged.
CLLocationCoordinate2D referencePosition = [mapView convertPoint:CGPointMake(0, 0) toCoordinateFromView:mapView];
CLLocationCoordinate2D referencePosition2 = [mapView convertPoint:CGPointMake(0, 100) toCoordinateFromView:mapView];
deltaLatFor1px = (referencePosition2.latitude - referencePosition.latitude)/100;
}
これらのプロパティが初期化されたら、UIScrollViewDelegate
の動作を実装する必要があります。ドラッグすると、ポイントで表された移動を緯度に変換します。そして、この値の半分を使って地図の中心を移動します。
- (void)scrollViewDidScroll:(UIScrollView *)theScrollView {
CGFloat y = theScrollView.contentOffset.y;
// did we drag ?
if (y<0) {
//we moved y pixels down, how much latitude is that ?
double deltaLat = y*deltaLatFor1px;
//Move the center coordinate accordingly
CLLocationCoordinate2D newCenter = CLLocationCoordinate2DMake(center.latitude-deltaLat/2, center.longitude);
mapView.centerCoordinate = newCenter;
}
}
あなたはFoursquareのアプリと同じ動作を得る(しかし、より良いを:Foursquareのアプリで、マップのrecenterはジャンプする傾向があり、ここで、中央を変更すると、スムーズに行われます)。
うわー、これはすばらしい答えです...ありがとう!私は休暇中でした...とにかく...私は実際にあなた自身の解決策に似ていました。唯一の違いは、私がスクロールして全体をリフレッシュしたときでした新しい可視領域を設定するmapView(地図を大きくスクロールする場合)...地図の新しい中心を設定するだけで、私のコードを更新するので、はるかに高速になります。もう一度ありがとう! :) –
viewDidLoad、特にreferencePositionでdeltaLatFor1pxを計算する方法を説明できますか?無効な地理座標に問題があるというコードでアプリのクラッシュが発生します。ありがとうございました! – MrBr
実際に私がしていることは、2つのスクリーンポジションを100pxで作成することです。次に、これらのスクリーン位置をマップ位置に変換します。それから私はどのくらいの緯度100pxが表すか知っています。そして、緯度がどれだけ1px(2つのスクリーン位置の間のデルタ緯度を100で割った値)で表されているかを知ることは簡単です。 – yonel
上記の例ではいいです。より多くのヘルプが必要な場合は、RBParallaxTableViewControllerと非常によく似たものを使用していると思います。 https://github.com/Rheeseyb/RBParallaxTableViewController
これは、Pathがヘッダー写真に使用するのと本質的に同じ効果です。
ヨネルの答えはいいですが、地図の中央にピンがあるので問題が見つかりました。負のYであるため、ポイントは私のUINavigationBarの下に隠されています。
次に、負のYを設定せず、mapView.frameをスクロールオフセットに従って修正します。
私のMapViewが、これは誰かに役立ちます320×160
_mapView.frame = CGRectMake(0, 160, 320, -160+y);
希望です。
- 1. フォースクエア会場の除外
- 2. フォースクエア会場のチェックイン許可エラー
- 3. Googleマップ会社の詳細を抽出するAPI
- 4. ショーグループ上詳細を照会
- 5. マスター詳細データウィンドウの詳細を新しいウィンドウに表示
- 6. foursquare api会場詳細specialsnearbyが返されない
- 7. UISplitViewControllerは新しい詳細コントローラをプッシュし、詳細を更新しません
- 8. 現在地詳細Googleマップ
- 9. 新しいセッションのログインの詳細
- 10. Googleマップ以外の場所でのピンのクリックの詳細
- 11. Googleマップから場所の詳細を取得する
- 12. Dapperコール後のマスター/詳細レコードのマップ
- 13. Crystal Reports詳細の詳細
- 14. Q:フォースクエア会場検索 - サブカテゴリIDを省略
- 15. Foursquare APIを使用して会場詳細を取得する方法
- 16. GoogleマップAPIからリストで最も近い場所の詳細を取得
- 17. 詳細を変更すると、AngularJs、マスター詳細更新マスター
- 18. フォースクエアAPI - コア会場のフィールドスペシャルに変更がありましたか?
- 19. 地図の場所写真やその他の詳細の詳細
- 20. フォースクエア会場検索APIに何か間違っていますか?
- 21. Google場所の詳細APIとGoogleマップからの経度が異なる?
- 22. Googleマップのアプリケーションを場所の詳細画面に直接開く
- 23. Googleマップの詳細が表示されない
- 24. Magentoは新しいデータベースの詳細を取得しません
- 25. XCodeプロジェクトテンプレートの詳細の更新
- 26. アイテムのベンダー詳細の更新
- 27. Silverstripe:メンバープロフィール - フロントエンドの詳細を更新
- 28. 詳細UITabBarItemのbadgeValueを更新する
- 29. Googleからの会社の連絡先の詳細
- 30. 新しいリリック開発者モードのトランザクショントレーサの詳細が必要
私の答えを編集しましたが、実装は完璧です;) – yonel