2015-11-18 5 views
0

У меня есть приложение с определенным количеством UIViews. Теперь мне нужно поменяться местами горизонтально. Например, есть UIView под названием X на левом конце, а один - Y на правом конце. На нажатии кнопки, я хочу Y проживать где X проживал и X прийти к UIViewY «s исходного положения. Я полагаю, я должен быть в состоянии сделать это, обменяв их NSLayoutConstraints (как раз догадка). Но я не могу заставить это работать. Возможно ли это? Каким будет код objective-C?Смена ограничений одного UIView на другой UIView

Original Image

Swapped Image

Таковы результаты, которые я получил после того, как попробовать первый код (почти, но не полностью). Я применил его только к мнениям KWI и DXB. То, что я хочу, это слепой обмен между KWI и DXB

ответ

1

Если мнения имеют одинаковый размер, то это не большая проблема. Предположим, что ваши два представления X и Y называются xView и yView. Вы могли бы сделать что-то вроде этого:

CGRect xViewFrame = xView.frame; 
UIViewAutoresizing xViewResizingConstraints = xView.autoresizingMask; 
xView.frame = yView.frame; 
xView.autoresizingMask = yView.autoresizingMask; 
yView.frame = xViewFrame; 
yView.autoresizingMask = xViewResizingConstraints; 

Если вы хотите, анимированные, вы можете поместить его внутри [UIView animateWithDuration: animations:^{}] блока, и он должен работать. (Я не проверял его)

Вы также можете изменить CGRect xViewFrame на использование CGPoint xViewCenter и обменять центры с одинакового размера.

Свойство autoresizingMask сообщает программе, что делать в случае изменения размера экрана - как путем изменения ориентации, так и из-за размера экрана устройства или по любой другой причине.

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

Надеюсь, это поможет.

EDIT

кажется, что вы используете UILabels либо ваш взгляд, или подвид из двух точек зрения. Если это так, убедитесь, что вы также замените NSTextAlignment UILabels. Что-то вроде этого:

NSTextAlignment xTextAlignment = xView.titleLabel.textAlignment; 
xView.titleLabel.textAlignment = yView.titleLabel.textAlignment; 
yView.titleLabel.textAlignment = xTextAlignment; 
+0

Позвольте мне попробовать это –

+0

Пожалуйста, смотрите изображения, которые я загружены –

+0

я не смог получить обменивать Разбивочные работать. я просто жестко закодировал и изменил выравнивание при начале обмена –

Смежные вопросы