CABasicAnimation не прокручивается с остальной частью View - PullRequest
2 голосов
/ 22 мая 2010

Все, я работаю над воспроизведением эффекта пульсирующего синего круга, который карта использует для отображения вашего собственного местоположения ...
Я наложил 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"];

Но это мало помогает, когда я играю с ним, иногда мне кажется, что однажды он оживляется в нужном месте после того, как япереместил его вне центра, но затем он переключается обратно на анимацию из центральной точки в новое местоположение.

Ооо, любые предложения или мне нужно предоставить дополнительную информацию.

...