Есть ли способ преобразовать систему координат после изменения альбомной ориентации?
-
23-08-2019 - |
Вопрос
В приложении для iPhone OS на основе представлений я меняю ориентацию с исходной книжной на альбомная ориентация (UIInterfaceOrientationLandscapeRight).Но теперь начало координат x,y (0,0) находится в нижний левый угол (вместо обычного верхнего левого угла), и каждый раз, когда я хочу сделать что-то, связанное с координатами, мне приходится пересчитывать, чтобы компенсировать новую систему координат.Я также заметил, что мои представления в новой системе координат иногда ведут себя ненормально.Итак, есть ли способ преобразовать систему координат ОДИН РАЗ, сразу после того, как я переключу ориентацию, чтобы я мог продолжать думать о своих координатах как о имеющих начало координат в верхний левый угол?
Решение
Если вы примените рекомендуемый подход и примените преобразование к основному виду, чтобы повернуть его:
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;
}
тогда любые подвиды, которые вы добавляете к этому основному виду, должны использовать стандартную систему координат.Преобразование, применяемое к основному виду, также заботится о вращении координат подвидов.Это хорошо работает для меня в моем приложении.