Как вы переключаете не-полноэкранный UIView в супервизор с закругленными углами?

Я просматриваю UIViews, похожие на флип страницы приложения Weather. Однако взгляды не являются полноэкранными, а надстройка имеет закругленные углы. Проблема в том, что во время флип-анимации закругленные углы супервизора заполняются квадратными углами с черным.

Вот как я настраиваю углы:

self.view.layer.cornerRadius = 15.0f; self.view.clipsToBounds = YES; 

Вот как я просматриваю представления (как frontView и backView сохраняются):

 UIView *toView; UIView *fromView; UIViewAnimationOptions animationType; if (toFront) { toView = self.frontView; fromView = self.backView; animationType = UIViewAnimationOptionTransitionFlipFromLeft; } else { toView = self.backView; fromView = self.frontView; animationType = UIViewAnimationOptionTransitionFlipFromRight; } [UIView transitionFromView:self.fromView toView:self.toView duration:1 options:animationType completion:nil]; 

Когда я это self.view , круглые углы self.view заполняются черными. Можно ли этого избежать? Я не думаю, что достаточно знаю о Core Animation, чтобы решить эту проблему.

2 Solutions collect form web for “Как вы переключаете не-полноэкранный UIView в супервизор с закругленными углами?”

Если вам нужно сделать это в Core Animation, вы сделаете это, сделав анимацию отдельно от замены представлений. Это не трудно. Ниже описано, как это сделать и какой пример кода:

Замена взглядов

Замена представлений может быть выполнена, например:

 [UIView transitionFromView:self.fromView toView:self.toView duration:0.0 options:UIViewAnimationOptionTransitionNone completion:nil]; 

Анимация флип

Трудная часть – это, очевидно, анимация (и объединение обоих, если вы никогда этого не делали раньше).

Показывая только фронт обоих представлений

Поскольку вы хотите перевернуть два вида, как если бы они были двумя сторонами листа бумаги, вы не хотите, чтобы ни один из них не появлялся, когда они обращены в сторону. Это делается путем установки свойства doubleSided на NO на обоих слоях. (не будучи двусторонним, односторонним).

Создание флип

Вы хотите анимировать преобразование вида спереди из преобразования идентичности (без преобразования) в 180-градусное повернутое преобразование (обратное назад) вокруг оси y, так что оно переворачивается влево-вправо.

В то же время вы хотите оживить преобразование заднего вида с вращением -180 градусов в преобразование идентичности. Это откинет назад. Обе эти анимации могут быть выполнены как «базовые» анимации:

 CABasicAnimation *flipAnimation = [CABasicAnimation animationWithKeyPath:@"transform"]; [flipAnimation setFromValue:[NSValue valueWithCATransform3D:CATransform3DIdentity]]; // No rotation [flipAnimation setToValue:[NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI, 0,1,0)]]; // Rotate PI around Y [flipAnimation setFillMode:kCAFillModeBoth]; [flipAnimation setRemoveOnCompletion:NO]; [flippingView layer] addAnimation:flipAnimation forKey:@"myFlipAnimation"]; 

Затем вы делаете такую ​​же анимацию для другого вида. (Режим заполнения не позволяет анимации вернуться в исходное состояние после завершения)

Объединяя все это

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

 [CATransaction begin]; [CATransaction setAnimationDuration:2.0]; // 2 seconds [CATransaction setAnimationTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]]; [CATransaction setCompletionBlock:^{ // Your view replacing code here... }]; // Add the animations to both views here... [CATransaction commit]; 

Вот что я написал. Кажется, что это нормально, но, конечно, проверьте его сами.

Что нужно отметить:

  • Перед вызовом этого метода вы должны добавить представление, которое вы анимируете TO.

  • Метод НЕ удаляет ни одно из видов, поэтому удалите их с блоком завершения, если это необходимо.

  • Этот метод также не изменяет значения «модели слоя» ваших представлений, поэтому они останутся такими же, как и после анимации.

`

 + (void)flipRight:(BOOL)flipRight fromView:(UIView *)fromView toView:(UIView *)toView duration:(NSTimeInterval)duration completion:(void (^)(void))completionBlock { // Save original values BOOL fromViewDoubleSided = fromView.layer.doubleSided; BOOL toViewDoubleSided = toView.layer.doubleSided; BOOL fromViewUserInteractionEnabled = fromView.userInteractionEnabled; BOOL toViewUserInteractionEnabled = toView.userInteractionEnabled; // We don't want to see the other side of the layer fromView.layer.doubleSided = NO; toView.layer.doubleSided = NO; // We don't want user to fire off animation while its already going fromView.userInteractionEnabled = NO; toView.userInteractionEnabled = NO; [CATransaction begin]; [CATransaction setCompletionBlock:^{ // Restore original values fromView.layer.doubleSided = fromViewDoubleSided; toView.layer.doubleSided = toViewDoubleSided; fromView.userInteractionEnabled = fromViewUserInteractionEnabled; toView.userInteractionEnabled = toViewUserInteractionEnabled; if (completionBlock) completionBlock(); }]; CATransform3D flipOutTransform3D = CATransform3DMakeRotation(M_PI, 0,1,0); flipOutTransform3D.m34 = 1.0/(300.0*(flipRight ? -1 : 1)); CABasicAnimation *flipOutAnimation = [CABasicAnimation animationWithKeyPath:@"transform"]; flipOutAnimation.fromValue = [NSValue valueWithCATransform3D:CATransform3DIdentity]; flipOutAnimation.toValue = [NSValue valueWithCATransform3D:flipOutTransform3D]; flipOutAnimation.duration = duration; CATransform3D flipInTransform3D = CATransform3DMakeRotation(M_PI, 0,1,0); flipInTransform3D.m34 = 1.0/(300.0*(flipRight ? 1 : -1)); CABasicAnimation *flipInAnimation = [CABasicAnimation animationWithKeyPath:@"transform"]; flipInAnimation.fromValue = [NSValue valueWithCATransform3D:flipInTransform3D]; flipInAnimation.toValue = [NSValue valueWithCATransform3D:CATransform3DIdentity]; flipInAnimation.duration = duration; [fromView.layer addAnimation:flipOutAnimation forKey:@"flipOutAnimation"]; [toView.layer addAnimation:flipInAnimation forKey:@"flipInAnimation"]; [CATransaction commit]; }; 
  • iOS Custom UIView Drawing - CAShapeLayers или drawRect?
  • Затухание эмиттерных ячеек с помощью Core Animation
  • CoreAnimation, перемещение UIImageView с анимационной тенью в iOS 5 Xcode 4
  • Нарисуйте сегменты из круга или пончика
  • iphone: Как реализовать эффект flip страницы без завитки?
  • Как оживить цвет фона слоя UIView с помощью Facebook Pop Animation Framework?
  • Изменить встроенную продолжительность анимации scrollToItemAtIndexPath в UICollectionView?
  • Невозможно получить CALayer для обновления своего drawLayer: ВО ВРЕМЯ анимации границ
  • Ошибка класса CoreAnimation
  • Ссылка на подсчет я в блоках
  • Самый быстрый способ сделать тени на iOS?
  • Interesting Posts

    Общение с Bluetooth Classic в iOS, когда приложение находится в фоновом режиме?

    Выберите дату в UIDatePicker по UIAutomation?

    Как изменить значок приложения iOS в iTunes Connect при обновлении версии?

    Как выставить NSMutableArray как NSArray в качестве возвращаемого типа из метода

    Как добавить метку доступности к минус-изображению, которое добавляется в ячейку tableview?

    Принудительно создавать новый сеанс Quickblox каждый раз, когда открывается приложение iOS

    API для Alibris?

    Скриншот содержимого OpenGL ES для приложения Paint

    Не удается найти сегменты без идентификаторов

    $ http request status 0 с https

    Панель навигации, оттенок и цвет текста заголовка в iOS 8

    iOS App Transport Security не допускает подключения TLSv1.2 и исключений plist, которые не имеют никакого значения

    Первый запрос Google AdMob GADBannerView занимает много времени и зависает от пользовательского интерфейса

    Могу ли я настроить свое приложение с помощью профилей конфигурации?

    Tesseract OCR в приложении osX

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.