11

アニメーションで移動/回転することはできGMSMarkerますか?GMSMapView

4

4 に答える 4

7

1.2 で追加されたのは、GMSMarkerクラスにプロパティがあることです。プロパティを設定してマップにマーカーを追加する前animatedに、 に設定しただけだと思います (まだ試していません)。YESmap

https://developers.google.com/maps/documentation/ios/reference/interface_g_m_s_marker

GMSMarker *marker = [[GMSMarker alloc] init];
marker.position = CLLocationCoordinate2DMake(-33.8683, 151.2086);
marker.title = @"Sydney";
marker.snippet = @"Australia";
marker.animated = YES;
marker.map = mapView_;

これは、マーカーがマップにドロップされたときにアニメーション化されることを意味すると思います。この元の質問が求めていたように、高速のアニメーション化されたマーカーを作成できるわけではありません。

于 2013-04-19T00:23:43.293 に答える
1

私の解決策は、GMSMarker クラスをサブクラス化し、タイマーを使用して PNG シーケンスのサポートを追加することでした。コードの大まかなスケッチは次のとおりです。

.h:

#import <GoogleMaps/GoogleMaps.h>

@interface AnimatedGMSMarker : GMSMarker

@property (nonatomic, strong) NSString *animationBaseName;

-(void)setAnimation:(NSString *)name forFrames:(NSArray *)frames;

@end

.m

#import "AnimatedGMSMarker.h"

@implementation AnimatedGMSMarker{
    int _currentFrame;
    NSArray *_frameArray;
    NSTimer *_timer;
}

-(void)setAnimation:(NSString *)name forFrames:(NSArray *)frames{
    _frameArray = frames;
    _currentFrame = 0;
    _animationBaseName = name;
    self.icon = [UIImage imageNamed:[NSString stringWithFormat:@"%@%@",_animationBaseName,_frameArray[_currentFrame++]]];
    _timer = [NSTimer scheduledTimerWithTimeInterval:1.0/24.0f
                                                     target:self
                                                   selector:@selector(onRefreshTimer:)
                                                   userInfo:nil
                                                    repeats:YES];
}

-(void)onRefreshTimer:(NSTimer *)timer{
    self.icon = [UIImage imageNamed:[NSString stringWithFormat:@"%@%@",_animationBaseName,_frameArray[_currentFrame++]]];
    if (_currentFrame >= _frameArray.count){
        _currentFrame = 0;
    }
}

@end

インスタンス化したら、次のように送信します。

[self.myAnimatedMarker setAnimation:@"some_library_name" forFrames:@[@0,@1,@2,@3,@4,@5,@6,@7,@8,@9]];

また、ライブラリに、「some_library_name0」「some_library_name1」などの名前が付けられた同じサイズと登録の PNG がたくさんあることを確認してください。フレーム配列処理により、新しい PNG を作成せずにフレームを繰り返すことができます。

パフォーマンスに関しては、シミュレーターでアニメーション化するのは非常に遅いですが、デバイスではかなりパフォーマンスが高いようです。

幸運を!

于 2015-05-05T16:21:53.640 に答える
1

Google マップがアクセスできる OpenGL コンテキストにアクセスできないため、残念ながらそうではありません。あなたができる最善の方法は、再描画を必要とする UIImage としてマーカーを回転させることです。または、マーカーを移動することはできますが、非常に小さな増分で行わない限りジャンプします!

バグをGoogleに報告することをお勧めします。バグを含めてくれる可能性があります

于 2013-01-23T08:00:25.983 に答える
0

今のところ、マーカーにはアニメーション表示のオプションしかありません。

最近、Google Maps SDK for iOS 用のクラスター化ライブラリを作成し、アニメーションによる崩壊/崩壊を行いました。私が使用したアプローチは、手動の位置更新によるアニメーションでした。画面上に多数のマーカーが同時にアニメーション化されている場合、(バックグラウンドで可能なすべての計算と結果のキャッシュがあっても) 遅くなるため、多くの最適化と制限が必要です。したがって、今のところ、Google Maps SDK for iOS でこのようなアニメーションが本当に必要かどうか、特に古いデバイスでは、使用する必要がある最適化によってカスタム アニメーションがまったく無効になるかどうかをよく考えてください。

于 2013-05-16T07:09:44.543 に答える