2014-12-17 2 views
0

Я добавил UIView под некоторым углом. Теперь во время выполнения я хочу переместить это представление вверх (скажем, 20 пикселей).Измените рамку на CGAffineTransformMakeRotation?

При запуске

dragView = [[DragbleView alloc] initWithFrame:CGRectMake(10, 200, 200, 90)]; 
dragView.transform = CGAffineTransformMakeRotation (-0.663247); 

В Run Time

NSLog(@"Before : %@",NSStringFromCGRect(dragView.frame)); 
[dragView setCenter:CGPointMake(dragView.frame.origin.x, dragView.center.y+20)]; 
NSLog(@"After : %@",NSStringFromCGRect(dragView.frame)); 

Console O/р

Before : {{3.4947295778412979, 147.97225037436704}, {213.0105408443174, 194.05549925126593}} 
After : {{-103.0105408443174, 167.97225037436704}, {213.0105408443174, 194.05549925126593}} 

Как вы можете видеть, что я t идет не в том месте. Как разместить выше 20 px

ответ

1

Выполняется, как вы указали. Вы получите лучшие результаты, используя центральную точку для X и Y:

[dragView setCenter:CGPointMake(dragView.center.x, dragView.center.y + 20)]; 

Также, как указано ниже. iOS использует 0,0 как верхний левый, поэтому для перемещения чего-то «вверх» требуется вычесть 20 из dragView.center.y.

+0

Хорошо спасибо ....... – user3772344

0

Чтобы переместить UP, требуется минимизировать значения местоположения Y, тогда как вы добавляете.

Попробуйте это:

[dragView setCenter:CGPointMake(dragView.frame.origin.x, dragView.center.y - 20)]; 
3

Если вы читали документы на собственность UIView кадра, они говорят:

Если преобразование свойство не тождественное преобразование, значение это свойство не определено и поэтому следует игнорировать.

Таким образом, вы не можете изменить рамку, как только вы изменили преобразование своего представления. Он больше не работает.

Вместо этого вы должны использовать свойство центра представления, как предлагает @GaryRiches в своем ответе.

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