能否使用动画将GMSMarker
在GMSMapView
上移动/旋转?
能否使用动画将GMSMarker
在GMSMapView
上移动/旋转?
GMSMarker
类有一个animated
属性 - 我猜测您只需将其设置为YES
,然后通过设置其map
属性将标记添加到地图中(尽管我没有尝试过)。
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_;
我认为这意味着当标记被放置到地图上时,它将会是动画的 - 而不是你可以制作像原问题所问的高速动画标记。
animated
字段已更名为appearAnimation
。 - Pang#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]];
目前标记只有出现动画的选项。
最近为Google Maps SDK for iOS编写了聚类库,具有动画折叠/解体功能。我使用的方法是通过手动位置更新进行动画处理。如果同时在屏幕上有很多标记进行动画处理,那么速度会很慢(即使在后台进行所有可能的计算和结果缓存),因此需要进行大量的优化和限制。因此,现在最好认真考虑是否真的需要像这样使用Google Maps SDK for iOS的动画效果,有时候,特别是在旧设备上,您将不得不完全禁用自定义动画以进行优化。