2012-04-10 4 views
0

У меня есть проблема, которая, надеюсь, имеет простое решение. Я пытаюсь создать эффект качания с помощью кнопки, таймера, рамки, cgaffinetransformrotations и задержек. Все было бы замечательно, за исключением того, что когда кнопка поворачивается, и я устанавливаю рамку кнопки для уменьшения или увеличения y на 10 пикселей или около того, вращение делает рамку кнопки больше, чем обычно. Конечным результатом является кнопка, которая постоянно растет, пока она не проглатывает экран.Только набор CGPoint кадра

Я пробовал делать cgaffinetranslations с восходящим и нисходящим движениями, но для этого используется свойство transform (которое является тем же, что использует поворот). Результат - очень нервный и нереалистичный боб.

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

Любые идеи?

Спасибо!

КОД:

- (void)movePlay{ 
[self performSelector:@selector(moveDown:) withObject:play]; 
[self performSelector:@selector(rotateRight:) withObject:play afterDelay:0]; 
[self performSelector:@selector(moveUp:) withObject:play afterDelay:0.5]; 
[self performSelector:@selector(rotateLeft:) withObject:play afterDelay:1]; 

} 

- (void)moveUp:(UIButton*)log{ 

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:.5]; 
log.transform = CGAffineTransformMakeTranslation(0, -20); 
[UIView commitAnimations]; 

} 

- (void)rotateRight:(UIButton*)log{ 

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:1]; 
log.transform = CGAffineTransformMakeRotation(0.0174532925*10); 
[UIView commitAnimations]; 

} 
+0

только намеком из справочной библиотеки IOS: «Внимание! Если свойства преобразования не является преобразованием личности, значения этого свойства (кадр) не определено, и поэтому его следует игнорировать ». Смысл, вы должны, вероятно, установить границы, а не кадр. – lukasz

ответ

1

Это просто идея. Попробуйте объединить все отдельные преобразования вместе. Таким образом, вместо того, чтобы совершать самостоятельно

log.transform = CGAffineTransfor..., 

объединить их первым с

CGAffineTransformConcat(CGAffineTransform t1, CGAffineTransform t2); 
CGAffineTransformRotate(CGAffineTransform t1, CGFloat angle); 
etc. 
+0

Работал! Благодаря! – David

Смежные вопросы