创建动画位置标记

时间:2014-10-15 12:50:19

标签: ios iphone location core-animation ibeacon

我怎么能够,并且很容易创建一个我可以放在UIImage之上的位置标记。我有一个平面图,并确定用户在哪里使用iBeacons。我想在用户站在附近的信标位置上设置位置标记的动画,类似于地图上的位置标记。

有任何建议如何做到这一点?理想情况下,它将是一个圆形,扩展,并逐渐消失。我对动画没有任何经验,也没有最好的方法。

提前致谢!

[编辑:] 这是(原型)视图的屏幕截图,所以我想在其中一个标签上放置动画。

enter image description here

1 个答案:

答案 0 :(得分:0)

我做了类似的演示。我在信标位置绘制了一个蓝色圆圈,带有一个浅蓝色圆圈,其半径根据从信标到移动设备的估计距离而变化。这是一个小屏幕截图,显示效果的样子(浅蓝色方块是地图上描绘的附近物体):

location icon screenshot

绘制此代码的代码获取以米为单位的信标估计距离,并根据地图比例的radiusMultiplier进行调整。 centerX和centerY参数指示在屏幕上绘制点的位置:

-(void)setDistance: (double) distance centerX: (int) pixelCenterX centerY: (int) pixelCenterY radiusMultiplier: (double) radiusMultiplier {
    // distance is in meters
    if (distance < 0) {
        NSLog(@"Not setting distance because it is < 0");
        return;
    }
    int pixelRadius = distance*22*radiusMultiplier;
    if (pixelRadius > 160) {
        pixelRadius = 160;
    }
    if (pixelRadius < 14) {
        pixelRadius = 14;
    }

    NSLog(@"Changing radius of circle to %d", pixelRadius);
    if (_circle == Nil) {
        _circle = [[NASClickBehindView alloc] init];
        _circle.backgroundColor = [UIColor blueColor];
        _circle.alpha = 0.2;
        [_circle setFrame:CGRectMake(pixelCenterX-pixelRadius,pixelCenterY-pixelRadius,pixelRadius*2,pixelRadius*2)];
        [self.webView addSubview:_circle];
        _circle.tag = 100;
    }
    else {
        [_circle setFrame:CGRectMake(pixelCenterX-pixelRadius,pixelCenterY-pixelRadius,pixelRadius*2,pixelRadius*2)];
    }

    _circle.layer.cornerRadius = pixelRadius;

    if (_centerDot == Nil) {
        _centerDot = [[NASClickBehindView alloc] init];
        _centerDot.alpha = 0.9;
        _centerDot.layer.cornerRadius = 8;
        _centerDot.backgroundColor = [UIColor blueColor];
        [_centerDot setFrame:CGRectMake(pixelCenterX-8,pixelCenterY-8,16,16)];
        [self.webView addSubview:_centerDot];
        _centerDot.tag = 100;
    }
    else {
        [_centerDot setFrame:CGRectMake(pixelCenterX-8,pixelCenterY-8,16,16)];
    }
}