2015-06-22 4 views
1

Я хотел бы скользить в UIButton (серый цвет на снимке экрана) слева направо и центрировать его на экране. Существует UIButton (оранжевый цвет на скриншоте), уже хотя это центрируется и эта кнопка должна быть прижата к правому и всегда находится на расстоянии 20 от UIButton, который скользит в.Сдвиньте UIButton и нажмите другой UIButton, когда достигнуто определенное расстояние.

enter image description here

Центрированной кнопка (в оранжевом цвете) имеет четыре ограничения:

  • Высота ограничение
  • Ширин ограничение
  • Top пространства Layout Guide ограничение
  • Горизонтальное ограничение

В данный момент кнопка, которая будет скользить в (серым цветом) имеет следующие ограничения:

  • Центр Y отношения к кнопке оранжевой
  • Высота ограничение
  • Ширина ограничение
  • Ведущее место для наблюдения

Идея, что у меня было, чтобы добавить выход к «ведущим пространство» ограничение на серый UIButton и анимировать, что использование animateWithDuration в UIView в: анимации: метод:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.slideInLeadingConstraint.constant = 100; 
    [self.slideInButton setNeedsUpdateConstraints]; 
    [UIView animateWithDuration:3.0 animations:^{ 
     [self.slideInButton layoutIfNeeded]; 
     [self.centerButton layoutIfNeeded]; 
    }]; 
} 

Что я мог изменить в ограничении для этого Работа?

ответ

1
  1. Поскольку вы ожидаете, что оранжевая кнопка будет двигаться в какой-то момент, вы не сможете заставить ее центрировать. Опустите приоритет от 1000 к чему-то ниже. Это означает: мне бы хотелось, чтобы это было сосредоточено, но это не обязательно.

  2. Добавить горизонтальное расстояние (ведущее/конечное) между двумя кнопками. Установите его значение >= 20. Это означает: расстояние не может превышать 20 пунктов, но что-то большее в порядке.

  3. Animate прочь;)
    Внутри вашей анимации блока, вам нужно позвонить layoutIfNeeded на всех видах, участвующих в анимации или на одном из их общих superviews.

Примечание:
Причина, почему у вас возникли проблемы с этим является то, что вы назвали его от viewDidLoad. В этот момент представление было полностью инициализировано, но еще не добавлено в иерархию.
Пока не определено, насколько велика будет родительская точка зрения, и размеры анимации должны быть угаданы (просто принимая размеры вашей сцены в раскадровке).
Выполнение анимации после ее первоначального отображения (например, в viewDidAppear) приводит к вычислению анимации с правильными размерами.

+0

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

+0

@Jeria обновил мой ответ –

+0

Спасибо, я попробовал это, и результаты довольно странные. Центральная кнопка не центрируется, когда начинается анимация, но она немного перемещается, чтобы сохранить расстояние в 20pt. Еще одна особенность заключается в том, что эти кнопки также анимируются, от малого до размера, заданного в построителе интерфейса. –