2009-05-22 5 views
5

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

ответ

10

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

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; 
} 

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

+1

Вы, мужчина! – RexOnRoids

+0

Что делать, если координаты камеры. Просмотр изображения, например CIRectangleFeature или CGPoints, представляющих интерес для изображения. Теперь, если изображение находится в ландшафте и преобразуется в портрет с AspectFit, и вам нужно показать интересующую область. Как мы будем конвертировать точки, указывающие на альбомную и портретную версию приложения? В моем случае я преобразовал точки изображения камеры в View View, но они в альбомной версии – Hassy