gpt4 book ai didi

ios - 使用动画更改 GMSCircle 半径

转载 作者:行者123 更新时间:2023-12-01 19:00:57 28 4
gpt4 key购买 nike

我正在为我的应用程序使用 Google Maps iOS sdk。在我的应用程序中,用户可以绘制一个栅栏(一个圆圈),然后可以编辑以更改和调整圆的半径。
它的大小调整正确但是当半径值改变它的瞬间时,不是像 map 放大/缩小这样的平滑动画。最新的 GMaps sdk for ios 可以实现吗?

显然,这是不可能的,因为我看到的是 GMSCircle 是从 GMSOverlay 继承的,GMSOverlay 是 NSObject 的子级,所以它绝对不是一个 View ,而是用某个图层或类似的东西绘制叠加层。

任何帮助表示赞赏..!!

谢谢..!!

最佳答案

我发现你可以改变半径,圆就会改变。
所以我写了一个帮助类来做到这一点:

@interface TAMapCircle : GMSCircle
{
CLLocationDistance _from;
CLLocationDistance _to;
NSTimeInterval _duration;
}
@property (nonatomic, copy) void(^handler)();
@property (nonatomic, strong) NSDate * begin;
@end

@implementation TAMapCircle
// just call this
-(void)beginRadiusAnimationFrom:(CLLocationDistance)from
to:(CLLocationDistance)to
duration:(NSTimeInterval)duration
completeHandler:(void(^)())completeHandler {

self.handler = completeHandler;
self.begin = [NSDate date];
_from = from;
_to = to;
_duration = duration;

[self performSelectorOnMainThread:@selector(updateSelf) withObject:nil waitUntilDone:NO];
}

// internal update
-(void)updateSelf {

NSTimeInterval i = [[NSDate date] timeIntervalSinceDate:_begin];
if (i >= _duration) {
self.radius = _to;
self.handler();
return;
} else {
CLLocationDistance d = (_to - _from) * i / _duration + _from;
self.radius = d;
// do it again at next run loop
[self performSelectorOnMainThread:@selector(updateSelf) withObject:nil waitUntilDone:NO];
}
}
@end

希望我的回答能有所帮助。

关于ios - 使用动画更改 GMSCircle 半径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23016992/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com