Подтвердить что ты не робот

Анимация анимации UIView

В моей игре у меня есть сетка меньших UIView, размещенных на моем основном UIView. В случайном порядке коробки будут отличаться от цвета, и в этот момент пользователь может коснуться их, чтобы набрать очки. Когда они касаются коробки, я хочу показать какую-то анимацию, в идеале что-то похожее на модальный горизонтальный щелчок, который XCode предлагает изначально. Как я могу сделать эту анимацию без фактического перехода в другой UIView?

4b9b3361

Ответ 1

Вы можете просто попробовать и оживить преобразование вида, как это (для вертикального флип):

[UIView animateWithDuration:0.5 delay:0.0 options:UIViewAnimationOptionCurveEaseInOut
                 animations:^(void) {
                     view.transform = CGAffineTransformMakeScale(1, -1);
                 }
                 completion:nil];

или для лучшего контроля вы могли бы взглянуть на iOS-Flip-Transform.

EDIT:

для теневой вещи, попробуйте следующее:

    view.layer.shadowColor = [UIColor blackColor].CGColor;
    view.layer.shadowOpacity = 0.75;
    view.layer.shadowRadius = 15.0;
    view.layer.shadowOffset = (CGSize){0.0,20.0};

[UIView animateWithDuration:0.5 delay:0.0 options:UIViewAnimationOptionCurveEaseInOut
                 animations:^(void) {
                     view.transform = CGAffineTransformMakeScale(1, -1);
                 }
                 completion:^(BOOL b) {
    view.layer.shadowColor = [UIColor clearColor].CGColor;
    view.layer.shadowOpacity = 0.0;
    view.layer.shadowRadius = 0.0;
    view.layer.shadowOffset = (CGSize){0.0, 0.0};
                 }];

Надеюсь, это сработает для вас. Вы можете изменить настройки тени по своему усмотрению. Не забудьте импортировать QuartzCore/QuartzCore.h.

Ответ 2

UIView предоставляет метод под названием

+ (void)transitionFromView:(UIView *)fromView toView:(UIView *)toView duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options completion:(void (^)(BOOL finished))completion

Параметры включают UIViewAnimationOptionTransitionFlipFromLeft и... Right

Ответ 3

Для каждого поля, которое нужно перевернуть, вы можете использовать контейнер UIView. Добавьте обе стороны в этот контейнер.

if(side1Visible)
UIViewAnimationOptions options = UIViewAnimationOptionBeginFromCurrentState |     
UIViewAnimationTransitionFlipFromRight;  

[UIView transitionWithView:containerView  
              duration:1.0  
               options:options  
            animations:^{ side1.hidden = YES; side2.hidden = NO; }  
            completion:NULL];  


else{
UIViewAnimationOptions options = UIViewAnimationOptionBeginFromCurrentState |     
UIViewAnimationTransitionFlipFromLeft;  

[UIView transitionWithView:containerView  
          duration:1.0  
           options:options  
        animations:^{ side1.hidden = NO; side2.hidden = YES; }  
        completion:NULL]; 
}

Ответ 4

Вы можете сделать это со следующим кодом для Swift 3.0:

    UIView.animate(withDuration: 0.5, delay: 0.0, options: .curveEaseInOut, animations: { 
        self.view.transform = CGAffineTransform(scaleX: 1, y: -1)
    }, completion: nil)

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

Если вам нужен обработчик завершения, существует несколько вариантов

Ответ 5

Это то, с чем я столкнулся (в Swift 3) на основе Ответ Ilker Baltaci:

@IBAction func flipViews() {

    // declare variables for transition
    let duration = 0.5
    var animationOptions: UIViewAnimationOptions
    var animations: () -> Void
    var completion: ((Bool) -> Void)?

    if view2.isHidden {
        animationOptions = [.beginFromCurrentState, .transitionFlipFromTop]
        animations = {
            self.view2.isHidden = false
            self.view1.isHidden = true
        }
        completion = { success in
            if success {
                self.updateSomeContentOfView2()
            }
        }
    } else {
        animationOptions = [.beginFromCurrentState, .transitionFlipFromBottom]
        animations = {
            self.view2.isHidden = true
            self.view1.isHidden = false
        }
    }

    UIView.transition(with: containerView,
                      duration: duration,
                      options: animationOptions,
                      animations: animations,
                      completion: completion)
}

Иерархия My View для containerView, view1 и view2 (всех IBOutlets в моем классе ViewController) выглядит следующим образом:

  • containerView
    • view1
    • view2