Поверните кнопку вокруг центра - PullRequest
0 голосов
/ 12 марта 2010

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

  • это позволит пользователю «вращать» кнопки вокруг круговой траектории.

** фактическим примером этого будет меню Poynt для их приложения для iPhone. **

Я начал с этого кода, который я нашел в сообщении mahboudz здесь на SO:

- (void) runSpinAnimationWithDuration:(UIView*)animatedView withDuration:(CGFloat) duration;
{
CABasicAnimation* rotationAnimation;
rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.y"];
rotationAnimation.toValue = [NSNumber numberWithFloat: M_PI * 2.0 /* full rotation*/ * 1 * duration ];
rotationAnimation.duration = duration;
rotationAnimation.cumulative = YES;
rotationAnimation.repeatCount = 1.0; 
rotationAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
[animatedView.layer  setAnchorPoint:CGPointMake( 0.5, 0.5 )];
[animatedView.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"];
}

На SO здесь есть интересный пост о ротации: текст ссылки

В любом случае, я могу вращать кнопку - но не вокруг заранее заданного пути (как в сценарии планеты).

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 12 марта 2010

Вы вращаете кнопку вокруг своего собственного центра, как определено свойством frame. Кроме того, вам нужно изменить рамку кнопки на другую координату в то же время, когда вы ее поворачиваете. Примерно так:

CGFloat angle = rotationAnimation.toValue;
CGFloat radius = 50;
CGPoint rotationCenter = CGPointMake(100,100); 
b.frame = CGRectMake(rotationCenter.x + radius * cos(angle),  rotationCenter.y + radius * sin(angle), b.frame.size.width, b.frame.size.height)
...