Трудность найти правильную опорную точку для преобразований вращения - PullRequest
3 голосов
/ 10 ноября 2011

Я анимирую положение кнопки, вращая ее вокруг круга. Это создает UISwitch -подобное поведение, за исключением того, что оно намного более навороченное. Кнопка вращается, но в конечном итоге она покидает желаемое положение примерно на 0,25 радиана. Я пытаюсь выяснить, куда поместить точку привязки, чтобы кнопка вращалась по кругу вокруг своего начала.

Вот код, который я использую, чтобы сделать кнопку "орбитальной" с радиусом 120 пикселей от исходного местоположения.

float offsetX=120;
float offsetY=0;

enableDisableButton.layer.anchorPoint =
     CGPointMake(offsetX/enableDisableButton.frame.size.width,                 
                 offsetY/enableDisableButton.frame.size.height);

Я использую следующий метод для расчетов. Передав аргумент 90 для degrees, я ожидаю, что кнопка начнет с позиции 180˚ и переместится на 90 to, все еще на расстоянии 120 пикселей от ее начала

-(CGAffineTransform)calculateLabelPositionFromFixedPointWithOffsetClockwiseInDegrees:(float)degrees
{

    float rotation = degrees*(2*M_PI/360);
    CGAffineTransform transform24 = CGAffineTransformMakeRotation(rotation);
    NSLog(@"rotation: %f", rotation);
    return transform24;
}

Это небольшое смещение в 0,25 радиана означает, что мне нужно визуально подтвердить местоположение каждой кнопки, и я не могу легко настроить ее местоположение программно. Любая помощь в определении правильного способа поворота кнопки приветствуется.

Я пробовал другие способы вращения объектов. Например, у меня есть стрелка <--------x, и я хотел бы повернуть эту стрелку по кругу вокруг x. Как правильно расположить опорные точки для этой операции? Это [1, 0,5]? ​​

Более простой способ сделать такой тип вращений - поместить объект в симметричный UIView, отцентрировать его в нужной точке вращения и назначить преобразование вращения. Это работает, но требует, чтобы представление было в два раза больше:

Y----x----Y <вращает Y вокруг центральной точки X без каких-либо настроек точки привязки. Это очень полезный метод для поворота стрелок внутри аналоговых датчиков и тому подобное. </p>

Ответы [ 2 ]

0 голосов
/ 28 июля 2012

Точка привязки вашего enableDisableButton в этом примере будет

CGPointMake(offsetX/enableDisableButton.frame.size.width, 0)

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

CGPointMake(offsetX/enableDisableButton.frame.size.width, 0.5f)
0 голосов
/ 27 марта 2012

«Более простой способ сделать такой тип вращений - поместить объект в симметричный UIView, отцентрировать его в желаемой точке вращения и назначить преобразование вращения». этот способ в порядке.

...