Я пытаюсь создать свингометр, немного похожий на те, которые используются в играх в гольф, где пользователь держит кнопку, чтобы запустить свинг, отпускает на вершине, чтобы определить мощность, и в этот момент «свинг» меняет направление и пользователь снова нажимает на пути вниз, чтобы установить точность.
Вместо того, чтобы заполнять планку, я бы хотел использовать маятник, который качается слева направо. Маятник оставляет отметку там, где он впервые постучал (сила), и другую отметку, где он постучал во второй раз (точность).
Моя первая проблема - вращение маятника. Я читал эти посты о вращении UIImageView - здесь , здесь и здесь , но я надеялся, что смогу получить небольшой дополнительный совет: )
Прежде всего, вращение UIImageView - лучший способ приблизиться к этому? Я думал о том, чтобы определить, насколько близко маятник к правильному месту, сравнивая его координаты с координатами правильного места. Но чтобы это работало, UIImageView должен был бы физически двигаться, что я не уверен, что делает? Кроме того, как заставить UIImageView вращаться вокруг определенной точки, а не центральной точки. Или я должен просто увеличить ограничивающую рамку маятника, чтобы центральная точка была в правильном положении. И как я могу оставить «штамп», когда пользователь нажимает (или отпускает) кнопку?
Буду очень признателен за любую общую помощь относительно наилучшего подхода к этому вопросу :) Возможно, мой вопрос немного расплывчатый и обобщенный, но я надеюсь, что кому-то может понравиться этот вызов :)
Спасибо !!
Майкл
UPDATE:
Хорошо, я попробовал следующие два подхода, оба из которых теперь работают.
- (void)viewDidLoad {
pendulum.image = [UIImage imageNamed:@"winkOpen.png"];
[self swingPendulum];
}
- (void)swingPendulum {
CABasicAnimation *rotationAnimation;
rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
rotationAnimation.toValue = [NSNumber numberWithFloat:degreesToRadian(180)];
rotationAnimation.duration = 0.75;
rotationAnimation.repeatCount = 1.0;
rotationAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
[pendulum.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"];
}
/*
- (void)swingPendulum {
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1];
pendulum.transform = CGAffineTransformMakeRotation(degreesToRadian(180));
[UIView setAnimationDelegate:self];
[UIView commitAnimations];
}
*/
Теперь я не уверен, какой подход лучше, но с первым маятник качается выше 0 градусов, а не ниже, так что я собираюсь с этим.
Теперь мне нужно определить, где останавливается маятник, и повернуть вспять ... Но, возможно, я опубликую их как отдельные вопросы, поскольку это становится немного загроможденным! Я позабочусь, чтобы мои вопросы были более конкретными в будущем :)