Все, я работаю над воспроизведением эффекта пульсирующего синего круга, который карта использует для отображения вашего собственного местоположения ...
Я наложил UIView поверх MKMapView.UIView содержит пульсирующую анимацию.
В итоге я использовал следующий код, полученный из многочисленных ответов здесь на stackoverflow:
CABasicAnimation* pulseAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];
pulseAnimation.toValue = [NSNumber numberWithFloat: 0.0];
pulseAnimation.duration = 1.0;
pulseAnimation.repeatCount = HUGE_VALF;
pulseAnimation.autoreverses = YES;
pulseAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
[self.layer addAnimation:pulseAnimation forKey:@"pulseAnimation"];
CABasicAnimation* resizeAnimation = [CABasicAnimation animationWithKeyPath:@"bounds.size"];
resizeAnimation.toValue = [NSValue valueWithCGSize:CGSizeMake(0.0f, 0.0f)];
resizeAnimation.fillMode = kCAFillModeBoth;
resizeAnimation.duration = 1.0;
resizeAnimation.repeatCount = HUGE_VALF;
resizeAnimation.autoreverses = YES;
resizeAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
[self.layer addAnimation:resizeAnimation forKey:@"resizeAnimation"];
Это делает приемлемую работу по пульсации / затуханию круга, который я нарисовалв UIView, используя:
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetRGBStrokeColor(context, 1.0, 0.0, 0.0, 0.4);
// And draw with a blue fill color
CGContextSetRGBFillColor(context, 1.0, 0.0, 0.0, 0.1);
// Draw them with a 2.0 stroke width so they are a bit more visible.
CGContextSetLineWidth(context, 2.0);
CGContextAddEllipseInRect(context, CGRectMake(x-30, y-30, 60.0, 60.0));
CGContextDrawPath(context, kCGPathFillStroke);
Но я вскоре обнаружил, что, хотя это, кажется, работает, как только я перетаскиваю нижележащую карту в другое положение, анимация закручивается вверх ... В то время как положение, которое я хочу выделить,по центру экрана анимация работает нормально, после того как я перетащил позицию, чтобы она больше не центрировалась, теперь анимация начинает пульсировать, начиная с центра экрана, увеличиваясь до центра в позиции, перетаскиваемой из центра, и обратно ... Aюмористический и крутой эффект, но не то, что я искал.
Я понимаю, что, возможно, мне повезло на нескольких фронтах.Я не уверен, что я неправильно понял.Я думаю, что анимация масштабирует весь слой, в результате чего мой круг нарисован в середине.Так что это работает, когда по центру, но не когда не по центру.
Я попробовал следующее из одного из вопросов, предложенных stackoverflow, когда я начал этот вопрос:
CABasicAnimation* translateAnimation = [CABasicAnimation animationWithKeyPath:@"position"];
translateAnimation.fromValue = [NSValue valueWithCGPoint:CGPointMake(oldx, oldy )];
translateAnimation.toValue = [NSValue valueWithCGPoint:CGPointMake(x, y )];
// translateAnimation.fillMode= kCAFillModeBoth;translateAnimation.duration = 1,0;translateAnimation.timingFunction = [CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionEaseInEaseOut];[self.layer addAnimation: translateAnimation forKey: @ "translateAnimation"];
Но это мало помогает, когда я играю с ним, иногда мне кажется, что однажды он оживляется в нужном месте после того, как япереместил его вне центра, но затем он переключается обратно на анимацию из центральной точки в новое местоположение.
Ооо, любые предложения или мне нужно предоставить дополнительную информацию.