2015-12-09 3 views
0

Итак, я создал свой собственный UIView, который выглядит как предупреждение, и теперь я хочу добавить шоу и скрыть анимацию.Mimic UIAlertController show animation

Я хочу подражать анимации Apple по умолчанию для AlertController. Увольнение представляет собой простую анимацию затухания, однако я не уверен, как сформулировать анимацию шоу, это почти похоже на увядание в сочетании с усадкой.

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

Это мой окончательный результат:

enter image description here

Этот GIF не делает это не справедливость, но это очень похоже на UIAlertControllers анимации.

-(void)alerterShowAnimation { 
    self.alpha = 0; 
    self.hidden = NO; 
    self.transform = CGAffineTransformMakeScale(1.2, 1.2); 
    [UIView animateWithDuration:0.3 animations:^{ 
     self.alpha = 1.0f; 
     self.containerView.backgroundColor = [UIColor colorWithWhite:0.0 alpha:0.5]; 
    }]; 
    [UIView animateWithDuration:0.2 delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^{ 
     self.transform = CGAffineTransformIdentity; 
    } completion:nil]; 
} 
+1

Что вы пробовали до сих пор? Сделайте попытку и вернитесь сюда с конкретными вопросами о проблемах, с которыми вы сталкиваетесь на этом пути. «Напиши мой код для меня» не является приемлемым вопросом. – Stonz2

+0

@ Stonz2 ... Я добавил код, который я пробовал до сих пор. – Lasonic

+0

Попробуйте использовать Core Animation –

ответ

0

Вместо UIView анимация, попробуйте использовать основную анимацию.

Я создал простой UIView с серым фоном, и добавил ниже анимации:

- (void)addAlertPopUpAnimationWithBeginTime:(CFTimeInterval)beginTime andFillMode:(NSString *)fillMode andRemoveOnCompletion:(BOOL)removedOnCompletion completion:(void (^)(BOOL finished))completionBlock 
{ 
    CAMediaTimingFunction *linearTiming = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]; 

    if (completionBlock) 
    { 
     CABasicAnimation *representativeAnimation = [CABasicAnimation animationWithKeyPath:@"not.a.real.key"]; 
     representativeAnimation.duration = 0.200; 
     representativeAnimation.delegate = self; 
     [self.layer addAnimation:representativeAnimation forKey:@"AlertPopUp"]; 

    } 

    CAKeyframeAnimation *proPicOpacityAnimation = [CAKeyframeAnimation animationWithKeyPath:@"opacity"]; 
    proPicOpacityAnimation.duration = 0.200; 
    proPicOpacityAnimation.values = @[@(0.000), @(0.525), @(1.000)]; 
    proPicOpacityAnimation.keyTimes = @[@(0.000), @(0.500), @(1.000)]; 
    proPicOpacityAnimation.timingFunctions = @[linearTiming, linearTiming]; 
    proPicOpacityAnimation.beginTime = beginTime; 
    proPicOpacityAnimation.fillMode = fillMode; 
    proPicOpacityAnimation.removedOnCompletion = removedOnCompletion; 
    [[self layer] addAnimation:proPicOpacityAnimation forKey:@"alertPopUp_Opacity"]; 

    CAKeyframeAnimation *proPicScaleXAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform.scale.x"]; 
    proPicScaleXAnimation.duration = 0.200; 
    proPicScaleXAnimation.values = @[@(0.304), @(0.345), @(0.300)]; 
    proPicScaleXAnimation.keyTimes = @[@(0.000), @(0.500), @(1.000)]; 
    proPicScaleXAnimation.timingFunctions = @[linearTiming, linearTiming]; 
    proPicScaleXAnimation.beginTime = beginTime; 
    proPicScaleXAnimation.fillMode = fillMode; 
    proPicScaleXAnimation.removedOnCompletion = removedOnCompletion; 
    [[self layer] addAnimation:proPicScaleXAnimation forKey:@"alertPopUp_ScaleX"]; 

    CAKeyframeAnimation *proPicScaleYAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform.scale.y"]; 
    proPicScaleYAnimation.duration = 0.200; 
    proPicScaleYAnimation.values = @[@(0.381), @(0.435), @(0.389)]; 
    proPicScaleYAnimation.keyTimes = @[@(0.000), @(0.500), @(1.000)]; 
    proPicScaleYAnimation.timingFunctions = @[linearTiming, linearTiming]; 
    proPicScaleYAnimation.beginTime = beginTime; 
    proPicScaleYAnimation.fillMode = fillMode; 
    proPicScaleYAnimation.removedOnCompletion = removedOnCompletion; 
    [[self layer] addAnimation:proPicScaleYAnimation forKey:@"alertPopUp_ScaleY"]; 

    CAKeyframeAnimation *proPicTranslationXAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform.translation.x"]; 
    proPicTranslationXAnimation.duration = 0.200; 
    proPicTranslationXAnimation.values = @[@(0.000), @(0.194), @(0.683)]; 
    proPicTranslationXAnimation.keyTimes = @[@(0.000), @(0.500), @(1.000)]; 
    proPicTranslationXAnimation.timingFunctions = @[linearTiming, linearTiming]; 
    proPicTranslationXAnimation.beginTime = beginTime; 
    proPicTranslationXAnimation.fillMode = fillMode; 
    proPicTranslationXAnimation.removedOnCompletion = removedOnCompletion; 
    [[self layer] addAnimation:proPicTranslationXAnimation forKey:@"alertPopUp_TranslationX"]; 

    CAKeyframeAnimation *proPicTranslationYAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform.translation.y"]; 
    proPicTranslationYAnimation.duration = 0.200; 
    proPicTranslationYAnimation.values = @[@(0.000), @(11.242), @(0.581)]; 
    proPicTranslationYAnimation.keyTimes = @[@(0.000), @(0.500), @(1.000)]; 
    proPicTranslationYAnimation.timingFunctions = @[linearTiming, linearTiming]; 
    proPicTranslationYAnimation.beginTime = beginTime; 
    proPicTranslationYAnimation.fillMode = fillMode; 
    proPicTranslationYAnimation.removedOnCompletion = removedOnCompletion; 
    [[self layer] addAnimation:proPicTranslationYAnimation forKey:@"alertPopUp_TranslationY"]; 
} 



- (void)addAlertPopUpAnimationWithCompletion:(void (^)(BOOL finished))completionBlock 
{ 
    [self addAlertPopUpAnimationWithBeginTime:0 andFillMode:kCAFillModeBoth andRemoveOnCompletion:NO completion:completionBlock]; 
} 

Если вы хотите добавить анимацию, вызов сразу после того, как вы добавите вид, как подвид: Вы должны наследоваться UIView и введите код там.

Позже вы можете позвонить:

[_yourView addAlertPopUpAnimationWithCompletion:^(BOOL finished) { 

    //do your stuff after animation is finished 
}]; 

анимация выглядит следующим образом:

enter image description here