Есть ли способ преобразовать систему координат после изменения в альбомную ориентацию? - PullRequest
5 голосов
/ 22 мая 2009

В приложении iPhone OS на основе представления я меняю ориентацию с исходной книжной ориентации на альбомную ориентацию (UIInterfaceOrientationLandscapeRight). Но теперь x, y origin (0,0) находится в нижнем левом углу 1004 * (вместо обычного верхнего левого угла), и каждый раз, когда я хочу сделать что-то, что связано с координатами, я должен пересчитать чтобы компенсировать новую систему координат. Я также заметил, что мои взгляды в новой системе координат иногда не ведут себя нормально. Итак, есть ли способ преобразовать систему координат ОДИН РАЗ, сразу после того, как я переключу ориентацию, чтобы я мог продолжать думать о том, что мои координаты имеют начало координат в верхнем левом углу?

1 Ответ

10 голосов
/ 22 мая 2009

Если вы применяете рекомендуемый подход к применению преобразования к основному виду для его поворота:

UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
if (orientation == UIInterfaceOrientationLandscapeRight) 
{
    CGAffineTransform transform = primaryView.transform;

    // Use the status bar frame to determine the center point of the window's content area.
    CGRect statusBarFrame = [[UIApplication sharedApplication] statusBarFrame];
    CGRect bounds = CGRectMake(0, 0, statusBarFrame.size.height, statusBarFrame.origin.x);
    CGPoint center = CGPointMake(60.0, bounds.size.height / 2.0);

    // Set the center point of the view to the center point of the window's content area.
    primaryView.center = center;

    // Rotate the view 90 degrees around its new center point.
    transform = CGAffineTransformRotate(transform, (M_PI / 2.0));
    primaryView.transform = transform;
}   

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

...