2012-12-31 61 views
17

我想知道如何在地图上实现蓝色球与当前位置的脉动环,但没有mapview。IOS动画脉冲圈如地图上的蓝色球

基本上我想知道在正常UIView(或我的自定义视图)上有一个带有脉动环的蓝色球的最佳方式,无论用户何时触摸屏幕,该触摸都是蓝色球的中心。

我有两个想法,首先我可以实现一个动画,但我无法做到,但它可能是可能的。 第二,我可以得到一系列图像,例如gif,并在用户触摸的任何地方显示。

哪一个是最好的选择?还是有更好的选择?

谢谢。

回答

44

试试这个:

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(200, 200, 100, 100)]; 
view.backgroundColor = [UIColor blueColor]; 
view.layer.cornerRadius = 50; 

[self.view addSubview:view]; 

CABasicAnimation *scaleAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale"]; 
scaleAnimation.duration = 0.2; 
scaleAnimation.repeatCount = HUGE_VAL; 
scaleAnimation.autoreverses = YES; 
scaleAnimation.fromValue = [NSNumber numberWithFloat:1.2]; 
scaleAnimation.toValue = [NSNumber numberWithFloat:0.8]; 

[view.layer addAnimation:scaleAnimation forKey:@"scale"]; 

设置参数,只要你喜欢,修改的效果。

编辑:

您必须添加QuartzCore框架,包括<QuartzCore/QuartzCore.h>这个工作。

+1

非常感谢你,这解决了我所有的问题。 我不知道layer有那个cornerRadius属性。 –

+0

我该如何接受=)。 对不起,这里从来没有问过太多,只是搜索了人们已经发布的内容。 –

+0

还有一件事,如果我想使弧不完全完成? 从0到PI? 我确实设法使用CGContextAddArc来做到这一点,但我无法设置边框宽度。 刚刚发现我自己=),无论如何,谢谢。 答案:CGContextSetLineWidth –

1

以编程方式执行动画而不是使用图像序列是更好的方法(并且它也是Apple如何做的)。它具有许多优点,尤其是性能要好得多(您的图像序列动画不可能在60FPS下运行!)。

您可以通过多种方式实现此动画:最简单的方法是在图像编辑器中创建环形图形,然后创建一个可用于保存该动画的图形。然后,您可以简单地对视图的比例,alpha和帧属性(确保您的图像视图设置为按比例调整图像大小)进行动画处理。为确保您的动画动画无限重复,您可以设置UIView动画重复属性。你的中央'蓝色球'可以是一个单独的UIImageView覆盖顶部。

UIView动画非常简单,苹果有很多示例代码可以帮助你。你只需将你在动画块中动画的属性以及动画参数(持续时间,重复等)放在一起,iOS就会完成剩下的动作。在StackOverflow上搜索'UIView动画'会给你很多很多的问题,可能会有所帮助。

16

尝试一下本作SWIFT

let view:UIView = UIView(frame: CGRectMake(200, 200, 100, 100)) 
view.layer.cornerRadius = 50 
view.backgroundColor = UIColor.blueColor() 

self.view.addSubview(view) 

let scaleAnimation:CABasicAnimation = CABasicAnimation(keyPath: "transform.scale") 

scaleAnimation.duration = 0.5 
scaleAnimation.repeatCount = 30.0 
scaleAnimation.autoreverses = true 
scaleAnimation.fromValue = 1.2; 
scaleAnimation.toValue = 0.8; 

view.layer.addAnimation(scaleAnimation, forKey: "scale") 
+0

scaleAnimation.repeatCount = 30.0只会重复动画30次迭代。使用scaleAnimation.repeatCount = HUGE使动画无限期地重复。 – leafcutter