Моя простая цель - убрать анимацию, скрывая и показывая функции.
Button.hidden = YES;
Достаточно просто. Однако возможно ли, чтобы оно исчезло, а не исчезло? Это выглядит довольно непрофессионально.
источник
Моя простая цель - убрать анимацию, скрывая и показывая функции.
Button.hidden = YES;
Достаточно просто. Однако возможно ли, чтобы оно исчезло, а не исчезло? Это выглядит довольно непрофессионально.
В iOS 4 и более поздних версиях есть способ сделать это, просто используя метод перехода UIView без необходимости импортировать QuartzCore. Вы можете просто сказать:
[UIView transitionWithView:button
duration:0.4
options:UIViewAnimationOptionTransitionCrossDissolve
animations:^{
button.hidden = YES;
}
completion:NULL];
UIView.transition(with: button, duration: 0.4,
options: .transitionCrossDissolve,
animations: {
button.hidden = false
})
Решение Михаила будет работать, но на самом деле это не лучший подход.
Проблема с альфа-замиранием заключается в том, что иногда разные перекрывающиеся слои вида выглядят странно по мере их исчезновения. Есть несколько других альтернатив, использующих Core Animation. Сначала включите в приложение фреймворк QuartzCore и добавьте его #import <QuartzCore/QuartzCore.h>
в заголовок. Теперь вы можете сделать одно из следующего:
1) установить button.layer.shouldRasterize = YES;
и затем использовать код альфа-анимации, который Михаил предоставил в своем ответе. Это предотвратит странное смешивание слоев, но приведет к небольшому снижению производительности и может привести к тому, что кнопка будет выглядеть размытой, если она не выровнена точно по границе пикселей.
В качестве альтернативы:
2) Используйте следующий код для анимации затухания:
CATransition *animation = [CATransition animation];
animation.type = kCATransitionFade;
animation.duration = 0.4;
[button.layer addAnimation:animation forKey:nil];
button.hidden = YES;
Хорошая вещь в этом подходе заключается в том, что вы можете плавно изменять любое свойство кнопки, даже если они не анимируемы (например, текст или изображение кнопки), просто установите переход, а затем сразу же установите свои свойства.
transitionWithView
параметр, чтобы обеспечить успешное появление и исчезновение.Анимированные свойства UIView:
isHidden
не один из них, так что, на мой взгляд, лучший способ это:Свифт 4:
Цель C:
источник
Чтобы исчезнуть:
Objective-C
Swift 2
Свифт 3, 4, 5
Чтобы исчезнуть:
Objective-C
Swift 2
Свифт 3, 4, 5
источник
Я использую это небольшое расширение Swift 3 :
источник
Swift 3
источник
Swift 4.2
с расширением:
простой метод:
источник
Используйте это решение для плавных эффектов затухания и затухания
использование как
Спасибо
источник
fadeOut
работает на iOS 13, только если я удаляю строки, которые установленыself.isHidden
.Я создал категорию
UIView
для этой цели и реализован специальный немного другое понятие:visibility
. Основное отличие моего решения в том, что вы можете позвонить[view setVisible:NO animated:YES]
и сразу после этого синхронно проверить[view visible]
и получить правильный результат. Это довольно просто, но чрезвычайно полезно.Кроме того, разрешено избегать использования «отрицательной логической логики» (см. Code Complete, стр. 269, используйте положительные имена логических переменных для получения дополнительной информации).
стриж
UIView+Visibility.swift
Objective-C
UIView+Visibility.h
UIView+Visibility.m
источник
Код @Umair Afzal работает хорошо в Swift 5 после некоторых изменений
для использования
источник
Swift 4
И чтобы использовать его, просто вызовите эти функции, такие как:
источник
isHidden
является непосредственным значением, и вы не можете повлиять на анимацию, вместо этого вы можете использовать Alpha для скрытия вашего видаИ для показа:
источник
Вы можете сделать это ОЧЕНЬ легко, используя библиотеку Animatics :
источник
источник
Вы можете попробовать это.
И передать свое имя просмотра
источник
Если ваш вид по умолчанию скрыт или вы изменяете скрытое состояние, которое, как я думаю, вам следует во многих случаях, то ни один из подходов на этой странице не обеспечит вам анимацию FadeIn / FadeOut, а только анимацию одного из этих состояний, причина в том, что вы устанавливаете скрытое состояние в false перед вызовом метода UIView.animate, который вызывает внезапную видимость, и если вы только анимируете альфа, то пространство объектов все еще там, но оно не видно, что приведет к некоторым проблемам с пользовательским интерфейсом.
Поэтому лучше всего сначала проверить, является ли вид скрытым, а затем установить альфа в 0.0, например, когда вы устанавливаете скрытое состояние в false, вы не увидите внезапную видимость.
источник
UIView.transition (с функцией :) хорош и аккуратен.
Многие опубликовали это, но никто не заметил, что ложь ошибка появится только тогда, когда вы запустите ее.
Вы можете полностью перевести скрытое свойство в true, тогда как при попытке перевести его в false, представление просто внезапно исчезнет без какой-либо анимации.
Это связано с тем, что этот API работает только в представлении, что означает, что при переходе представления к отображению фактически отображается сразу, только его содержимое постепенно анимируется.
Когда вы пытаетесь скрыть это представление, само по себе сразу прячетесь, делая анимацию для своего контента бессмысленной.
Чтобы решить эту проблему, при скрытии представления целью перехода должно быть его родительское представление вместо представления, которое вы хотите скрыть.
источник
Мое решение для Swift 3 . Итак, я создал функцию, которая скрывает / показывает вид в правильном порядке (при скрытии - установите альфа в 0, а затем isHidden в true; показать - сначала откройте представление, а затем установите его в 1):
источник
completion
блоке есть другая анимация, когдаhide
ложь?Swift 4 Transition
Если вы используете подход для более старых версий Swift, вы получите ошибку:
Полезная ссылка .
источник
isHidden
значение оказывается мгновенно (то есть, мгновенно скрытие / отображение).источник
Пробовал некоторые из вышедших ответов, некоторые работают только для одной ситуации, некоторые из них должны добавить две функции.
Опция 1
Ничего общего с
view.isHidden
.Затем пройти
isFadeIn
(true
илиfalse
)Вариант 2
Не передавайте никаких параметров. Это исчезает или исчезает в соответствии с
isUserInteractionEnabled
. Это также очень хорошо подходит для анимации ситуации.Тогда вы звоните
Вот и все. Стоит мне когда-нибудь, надеюсь, это кому-нибудь поможет.
источник