使用动画更改 GMSCircle 半径
Posted
技术标签:
【中文标题】使用动画更改 GMSCircle 半径【英文标题】:Change GMSCircle radius with Animation 【发布时间】:2014-05-25 20:51:07 【问题描述】:我正在为我的应用程序使用 Google Maps ios sdk。在我的应用程序中,用户可以画一个栅栏(一个圆圈),然后可以编辑以更改和调整圆的半径。 它的大小调整正确但是当半径值改变它的瞬间时,不是像地图放大/缩小这样的平滑动画。最新的 GMaps sdk for ios 可以实现吗?
显然,这是不可能的,因为我看到的是 GMSCircle 是从 GMSOverlay 继承的,GMSOverlay 是 NSObject 的子级,所以它绝对不是一个视图,而是用某个图层或类似的东西绘制叠加层。
任何帮助表示赞赏..!!
谢谢..!!
【问题讨论】:
你试过改变动画块的半径吗?也许二传手改变了实际层的一些属性,这可以是动画 是的,我尝试在动画块中更改它,它仍然没有动画.. 您可以尝试使用计时器重复将半径从起始值更新到结束值... 【参考方案1】:我发现你可以改变半径,圆就会改变。 所以我写了一个帮助类来做到这一点:
@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
希望我的回答能有所帮助。
【讨论】:
你有这个样品吗?【参考方案2】:我使用 CADisplayLink 做了类似的事情。它使得在 GMSMapView 中制作简单的动画变得非常容易。
https://developer.apple.com/library/prerelease/ios/documentation/QuartzCore/Reference/CADisplayLink_ClassRef/index.html
【讨论】:
【参考方案3】:您需要将尝试进行的动画更改包装在UIView
动画块中。这在最新版本的 iOS SDK 中已更改,因此方法签名为 [UIView beginAnimation:]
。包装您在此块中所做的任何更改,它们将由UIKit
进行动画处理。如果这不起作用,您可以使用 CoreAnimation
事务转到较低级别。
【讨论】:
尝试了所有这些,但问题是这些都适用于 UIVIew ,并且这个覆盖层是 NSObject 子类..以上是关于使用动画更改 GMSCircle 半径的主要内容,如果未能解决你的问题,请参考以下文章
html 使用CSS更改图像的大小,为其添加边框并更改其样式和边框半径
如何使用创建的自定义 IBDesignable 类从情节提要中更改按钮的角半径