2012-01-23 1 views
0

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

imageView.center 

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

Когда я держу его горизонтально, хотя я не могу его переместить в это положение, потому что в ландшафтном режиме я не могу использовать положение, которое было сохранено в режиме вертикальной ориентации. это связано с тем, что в Interface Builder я установил элемент для автоматического измерения по отношению к границам (что означает, что элемент находился в центре, а затем вращение IPad он по-прежнему остается в центре)

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

Я пытался вычислить положение вручную, как это:

- (CGPoint)getHorizontalCoordinatesForPoint:(CGPoint)point 
{ 
    CGSize size = [[UIScreen mainScreen]applicationFrame].size; 
    CGFloat relativeX = (point.x/(size.width)); 
    CGFloat relativeY = point.y/(size.height); 
    CGFloat horizontalScreenX = relativeX * (size.height); 
    CGFloat horizontalScreenY = relativeY * (size.width); 
    return CGPointMake(horizontalScreenX, horizontalScreenY); 
} 

, но это положение откусил. Я думаю, это потому, что я не учитываю размер панели навигации. Есть ли какая-то функция преобразования в ios, которая уже делает то, что я хочу?

ответ

1

Не делайте этого.

Скорее, вместо экономии [ImageView центр] при загрузке сцены, сохраните его в ключевых точках:

-touchesBegan: withEvent: (или, если вы используете жест распознавателей, в жесте распознавателя обратного вызова).

-didRotateFromInterfaceOrientation:

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

+0

Но не существует той же проблемы, когда пользователь прикасается в портретном режиме, и вы сохраняете местоположение, тогда вы также получаете только портретное положение. Когда вы затем перетаскиваете изображение, затем поворачиваетесь в альбомный, тогда элемент должен анимировать назад, он выбирает неправильное положение. Запуск приложения в режиме ландшафта не помогает, потому что вы получаете только положение ландшафта. – JayAr

+0

Исправлено это сейчас, потому что мне также нужен другой UIView в исходном местоположении значка. Этот UIView исправлен, поэтому я просто перетаскиваю значок с возможностью перетаскивания в позицию этого вида. Работает как с пейзажным, так и с портретным режимом. Это своего рода хак, но мне все равно нужно показать этот взгляд. – JayAr