5

GMSMapView インスタンスから myLocationButton のインスタンスを取得する方法を知っている人はいますか? または、デフォルトの位置を変更する方法はありますか? 数ピクセル上に移動するだけです。

4

4 に答える 4

4

Raspu のソリューションは、コンパスを含む GMSUISettingsView 全体を動かします。

ロケーションボタンのみを移動する解決策を見つけました:

for (UIView *object in mapView_.subviews) {
    if([[[object class] description] isEqualToString:@"GMSUISettingsView"] )
    {
        for(UIView *view in object.subviews) {
            if([[[view class] description] isEqualToString:@"UIButton"] ) {
                CGRect frame = view.frame;
                frame.origin.y -= 75;
                view.frame = frame;
            }
        }
        /*        
        CGRect frame = object.frame;
        frame.origin.y += 75;
        object.frame = frame;
        */
    }
};

3 行のコメントを外すと、コンパスのみが移動します (何らかの理由で GMSCompassButton ビューを移動できません)。

于 2013-07-26T10:59:40.837 に答える
3

Swift 2.3:ロケーション ボタンのみを移動するソリューション。pod 'GoogleMaps', '~> 2.1' を使用しています。

for object in mapView.subviews {
    if object.theClassName == "GMSUISettingsView" {
        for view in object.subviews {
            if view.theClassName == "GMSx_QTMButton" {
              var frame = view.frame
              frame.origin.y = frame.origin.y - 110px // Move the button 110 up
              view.frame = frame
            }
        }
    }
}

クラス名を取得するための拡張。

extension NSObject {
  var theClassName: String {
    return NSStringFromClass(self.dynamicType)
  }
}

このコードをできるだけ早くSwift 3.0に更新します。:)

于 2016-10-18T13:53:33.190 に答える
0

今私が見つけた唯一の方法はこの方法です:

//The method 'each' is part of Objective Sugar 
[googleMapView.subviews each:^(UIView *object) {
    if([[[object class] description] isEqualToString:@"GMSUISettingsView"] )
    {
        CGPoint center = object.center;
        center.y -= 40; //Let's move it 40px up
        object.center = center;
    }
}];

正常に動作していますが、公式の方法の方が良いでしょう。

これは 1.4.0 バージョンで機能します。以前のバージョンの場合は、 を変更@"GMSUISettingsView"して@"UIButton"ください。

于 2013-06-19T03:13:51.350 に答える