我想知道如何使用地图中当前位置的脉动环来实现蓝色球,但没有地图视图。
基本上我想知道每当用户触摸屏幕时,在正常的UIView(或我的自定义视图)上有一个带有脉动环的蓝色球的最佳方式,该触摸是蓝色的中心球。
我有两个想法,首先我可以实现一个动画,我无法做到,但它可能是可能的。 其次,我可以获得一系列图像,如gif,并在用户触摸的任何地方显示它。
哪一个是最佳选择?或者有更好的选择吗?
谢谢。
答案 0 :(得分: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 :(得分: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")
答案 2 :(得分:1)
以编程方式而不是使用图像序列来制作动画是更好的方法(Apple也是如此)。它具有许多优点,尤其是性能更好(您的图像序列动画不太可能以60FPS运行!)。
您可以通过多种方式实现此动画:最简单的方法是在图像编辑器中创建环形图形,然后创建UIImageView
来保存它。然后,您可以简单地为视图设置缩放,Alpha和框架属性(确保图像视图设置为按比例调整图像大小)。为确保您的脉动动画无限重复,您可以设置UIView动画重复属性。您的中心“蓝色球”可以是一个单独的UIImageView
覆盖在顶部。
UIView
动画相当简单,Apple有很多示例代码可以帮助你。您只需将动画块中动画的属性以及动画参数(持续时间,重复次数等)括起来,iOS将完成剩下的工作。在StackOverflow上搜索“UIView动画”将为您提供许多可能有帮助的问题。
答案 3 :(得分:0)
这是Swift 5.3版本。
let view = UIView(frame: CGRect(x:200, y:200, width:100, height:100))
view.layer.cornerRadius = 50
view.backgroundColor = .blue
self.view.addSubview(view)
let scaleAnimation = CABasicAnimation(keyPath: "transform.scale")
scaleAnimation.duration = 1.33
scaleAnimation.repeatCount = Float.infinity
scaleAnimation.autoreverses = true
scaleAnimation.fromValue = 1.5;
scaleAnimation.toValue = 0.75;
view.layer.add(scaleAnimation, forKey: "scale")
最好。