2010-04-08 1 views
3

Я пытаюсь реализовать график, который рисует uiview. Существует 3 UIViews для анимации левого/правого слайда. Проблема в том, что я не могу отменить анимацию UIView. Поэтому я заменил UIViews на CALayer. Теперь вопрос в том, подходит ли CALayer для этого? Нормально ли рисовать на CALayer, как это? И почему CALayer так медленно, когда я управляю свойствами фрейма.Рисование и анимация с UIView или CALayer?

CGRect frame = curve.frame; 
frame.origin.x -= diffX; 
[curve setFrame:frame]; 

Есть ли альтернатива?

P.S. Я немецкий парень. Извините за ошибки.


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

CABasicAnimation *theAnimation; 
theAnimation = [CABasicAnimation animationWithKeyPath:@"position"]; 
theAnimation.delegate = self; 
theAnimation.duration = 1.0; 
theAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]; 
CGPoint position = [[curves objectAtIndex:i]position]; 
position.x = [[curves objectAtIndex:i]position].x - diffX; 
[theAnimation setToValue:[NSValue valueWithCGPoint:position]]; 
[[curves objectAtIndex:i] addAnimation:theAnimation forKey:[NSString stringWithFormat: @"translate.x.%d", index]]; 

Положение изменяет положение (например, Xstart = 100, Xend = 200), но когда анимация заканчивается слой восходит к началу х (например, х = 100). Это нормально? Как я могу решить эту проблему, что конечная позиция больше не меняется? Я попытался изменить свойство removeOnComplete, но это не повлияло.

Надежды на помощь.

Markus

ответ

1

Не уверен, что вы подразумеваете под «медленным», но установка кадра из CALayer таким образом используете «неявное анимацию». То есть, он будет анимировать переход от старого кадра к новому кадру. Вы можете отключить это:

[CATransaction begin]; 
[CATransaction setValue: (id) kCFBooleanTrue forKey: kCATransactionDisableActions]; 
[curve setFrame:frame]; 
[CATransaction commit]; 

Однако это, как правило, считается преимущество из CALayer. Вы хотите просто использовать UIViews здесь, который не будет, по умолчанию, анимированными переходами, такими как это.

0

Вместо того, чтобы устанавливать позицию назначения в окне «Анимация», просто установите свойство позиции вещи, которую вы хотите переместить.

Когда вы добавляетеAnimation: theAnimation, вы устанавливаете «визуальный стиль» любых изменений в свойстве keyPath, которое вы указали.

Когда вы меняете положение объекта, к которому прикреплена анимация, скажем, от (0,0) до (500 500), CoreAnimation будет анимировать изменение для вас. Объекту TheAnimation не требуется начальная и конечная позиции, так как у базового объекта есть их.