2013-03-24 2 views
0

Я пытаюсь воспроизвести фрагменты большого пальца Music.app. Я создал demo project для точной настройки математики.CGAffineTransformRotate поведение несовместимо с контроллером вида и просмотра

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

Несмотря на то, что я скопировал свой код точно так же, как и в контроллере (внесение соответствующих изменений), но когда я запускаю приложение, вид отличается поведением от контроллера.

В ReflectedKnobViewCGAffineTransformRotate() перегибает и преображает виды непредсказуемым образом.

код я скопировал:

- (void)updateValues 
{  
CMRotationRate data = self.mManager.gyroData.rotationRate; 

self.xLabel.text = [NSString stringWithFormat:@"%f", RadiansToDegrees(data.x)]; 
self.yLabel.text = [NSString stringWithFormat:@"%f", RadiansToDegrees(data.y)]; 
self.zLabel.text = [NSString stringWithFormat:@"%f",RadiansToDegrees(data.z)]; 

[UIView animateWithDuration:1/20 animations:^{ 
    self.level3Left.transform = CGAffineTransformRotate(self.level3Left.transform, ((data.y/240) + (data.x/200))); 
    self.level3Right.transform = CGAffineTransformRotate(self.level3Right.transform, ((-1 * data.y)/240) + (data.x/200)); 
}]; 
} 

level3<Right/Left> являются UIImageView s.

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

Загрузите demo project и запустите его на устройстве, если вы не получите то, что я говорю здесь.

ответ

0

Я просто сделал подобный ответ на другой вопрос How do I calculate the affine translation parameters when rotating a view in iOS?

Вот пересказ, что:

Вы должны быть осторожны, о двух вещах, на ваш rotation-- свой узловую точку (точка, о которой происходит поворот) и размеры представления или viewController.

оригинальный вид:

enter image description here

Если узловая точка находится в углу, он вращается, как это:

enter image description here

Если узловая точка находится в середине, она вращается например:

enter image description here

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

+0

Вы загрузили демонстрационный проект? У меня точно такой же код в двух местах, но они вращают представления по-разному. И я не изменил опорную точку, поэтому по умолчанию она находится в центре. – duci9y