UISegmented Control Анимация/перевод

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

Я попытался реализовать следующий код из этого другого потока stackoverflow. С заменой btnMyButton на mySegControl.

btnMyButton.frame = CGRectMake(oldx,oldy,width,height);
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationTransition:UIViewAnimationTransitionNone forView:btnMyButton];
[UIView setAnimationDuration:0.3];  
btnMyButton.frame = CGRectMake(newx, newy, width, height);
[UIView commitAnimations];

При изменении [UIView setAnimationTransition:UIViewAnimationTransitionNone forView:presentingComplaintSegCtrl];

Выдает следующее предупреждение: «Метод класса семантической проблемы '+ setAnimationTransition: forView:' не найден (тип возврата по умолчанию равен 'id')"

Есть ли лучший способ подойти к этому?

Примечание. Я создаю сегментированный элемент управления в XIB.

Спасибо


person Ríomhaire    schedule 04.06.2012    source источник


Ответы (2)


Как говорится в предупреждении, метод «+setAnimationTransition:forView:» не существует в UIView. Метод, который вы ищете, это «+setAnimationTransition:forView:cache:'. Однако в документации есть примечание, в котором говорится:

Использование этого метода не рекомендуется в iOS 4.0 и более поздних версиях. Вы должны использовать transitionWithView:duration:options:animations:completion: для выполнения переходов.

Если вам не нужна поддержка iOS 3.x, я бы посоветовал вам сделать так, как говорит Apple, и использовать метод «transitionWithView:duration:options:animations:completion:» для вашей анимации :)

[ИЗМЕНИТЬ]

Привет, @Ríomhaire, еще раз перечитал твой вопрос... для твоего примера, вероятно, будет лучше, если ты просто воспользуешься animateWithDuration:animations: в UIView. Напишите код для изменений, которые вы хотите анимировать внутри блока, и передайте его в качестве параметра этому методу. Вот некоторая документация по блокам на случай, если она вам понадобится: http://developer.apple.com/library/ios/#featuredarticles/Short_Practical_Guide_Blocks/_index.html

person palpoms    schedule 04.06.2012
comment
Спасибо palpoms за быстрый ответ. - person Ríomhaire; 04.06.2012
comment
Спасибо, palpoms и @Justin-Paulson за быстрый ответ. Я пытался использовать оба, но мне не хватает понимания для правильного выполнения. Я также новичок в stackoverflow, поэтому извините за плохой этикет. Если у вас есть время, не могли бы вы показать мне пример show для использования предпочтительной функции? Если нет, не беспокойтесь, спасибо, что указали мне правильное направление. - person Ríomhaire; 04.06.2012
comment
Привет, Ríomhaire, ты читал пример в документации? Это в обсуждении метода transitionWithView:duration:options:animations:completion: - person palpoms; 04.06.2012
comment
Да, я это сделал, к сожалению, это вылетело из головы, так как я новичок в разработке iOS. Мой код для перехода находится внутри UIScrollView, поэтому я не уверен, является ли UIScrollView представлением контейнера или чем-то еще? Я думаю, что понимаю UIViewAnimationOptions, так как успешно использовал его раньше. Однако я также не уверен, как завершение анимации: (void (^) (BOOL завершено)) завершение соответствует моему вышеупомянутому коду. Я знаю, что я здесь не в своей тарелке, но я подумал, что многому научусь. - person Ríomhaire; 04.06.2012
comment
Привет, ребята, у меня работает метод +setAnimationTransition:forView:cache:, оказывается, у меня не подключен IBOutlet для mySegmentedControl. Так что это блестяще. Спасибо. Теперь я собираюсь перейти к предпочтительному методу. :) - person Ríomhaire; 04.06.2012
comment
Привет, @Ríomhaire, еще раз перечитал твой вопрос... для твоего примера, вероятно, будет лучше, если ты просто воспользуешься animateWithDuration:animations: в UIView. Напишите код для изменений, которые вы хотите анимировать внутри блока, и передайте его в качестве параметра этому методу. Вот документация по блокам. - person palpoms; 04.06.2012
comment
Теперь я отредактировал свой ответ, чтобы добавить информацию из моего последнего комментария. - person palpoms; 04.06.2012

Вы ищете +setAnimationTransition:forView:cache:

Из ссылки на UIView:

cache Если YES, изображения вида до и после визуализируются один раз и используются для создания кадров в анимации. Кэширование может повысить производительность, но если вы установите для этого параметра значение YES, вы не должны обновлять представление или его подпредставления во время перехода. Обновление представления и его подпредставлений может повлиять на поведение кэширования и привести к неправильному отображению содержимого представления (или в неправильном месте) во время анимации. Вы должны дождаться завершения перехода, чтобы обновить представление. Если НЕТ, вид и его содержимое должны обновляться для каждого кадра анимации перехода, что может заметно повлиять на частоту кадров.

поэтому добавьте cache:YES или cache:NO

или, как упоминалось palpoms, когда я печатал это, используйте transitionWithView:...

person Justin Paulson    schedule 04.06.2012