Во-первых, я новичок в Objective C, любая помощь будет оценена по достоинству. Я пытаюсь написать приложение Gauge (которое в конечном итоге покажет угол телефона). Проблема в том, что когда я поворачиваю изображение иглы, она поворачивается на правильный угол, но не от точки привязки - изображение перемещается в положение. Даже когда я двигаюсь, скажем от 0 до 90 и обратно до 0, изображение не возвращается в исходное положение! Код, который я использую, приведен ниже:. (PS Я только в настоящее время только работает приложение на тренажере)Вращающееся изображение вокруг фиксированной точки
*** Rotate Invoked by ....
// Rotate Image
[self rotateImage:_imgNeedle duration: vAnimationDuration curve: UIViewAnimationCurveLinear degrees:vValue];
-(void)rotateImage:(UIImageView *)image
duration:(NSTimeInterval)duration
curve:(int)curve
degrees:(CGFloat)degrees
{
// Setup the animation
[self setAnchorPoint:CGPointMake(.44,.85) forView:image];
// image.transform = CGAffineTransformMakeRotation(d2r(degrees));
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:duration];
[UIView setAnimationCurve:curve];
[UIView setAnimationBeginsFromCurrentState:YES];
// The transform matrix
CGAffineTransform transform = CGAffineTransformMakeRotation(d2r(degrees));
image.transform = transform;
// Commit the changes
[UIView commitAnimations];
}
// Set Anchor Point
-(void)setAnchorPoint:(CGPoint)anchorPoint forView:(UIView *)view
{
CGPoint newPoint = CGPointMake(view.bounds.size.width * anchorPoint.x, view.bounds.size.height * anchorPoint.y);
CGPoint oldPoint = CGPointMake(view.bounds.size.width * view.layer.anchorPoint.x, view.bounds.size.height * view.layer.anchorPoint.y);
newPoint = CGPointApplyAffineTransform(newPoint, view.transform);
oldPoint = CGPointApplyAffineTransform(oldPoint, view.transform);
CGPoint position = view.layer.position;
position.x -= oldPoint.x;
position.x += newPoint.x;
position.y -= oldPoint.y;
position.y += newPoint.y;
view.layer.position = position;
view.layer.anchorPoint = anchorPoint;
}
Благодарим за ответ. Я внес изменения, также заметила, что частота дискретизации была меньше, чем продолжительность анимации. но в то время как это лучше, к сожалению, это все еще не совсем правильно. В дизайне на Раскадке игла находится в центре циферблата, при движении она движется вертикально вверх. Меняя угол, я получаю горизонтальное движение. – user2413698
@ user2413698 не уверен, что вам нужно. Возможно, вы можете уточнить свой вопрос с дополнительной информацией. Или задайте другой вопрос, если этот ответ решит конкретную проблему, с которой вы столкнулись. –
Отключить автоматическую компоновку - Игла теперь правильно вращается вокруг оси - Исправлено! – user2413698