1.動畫結束後保持 狀態 android
CABasicAnimation *androidOutSecondAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];動畫
[androidOutSecondAnimation setFromValue:@1.0];spa
[androidOutSecondAnimation setToValue:@0.0];代理
[androidOutSecondAnimation setDuration:0.3f];code
/*************************************/orm
//這個 兩句是 動畫保持 狀態的 關鍵語句rem
androidOutSecondAnimation.removedOnCompletion = NO; 字符串
androidOutSecondAnimation.fillMode = kCAFillModeForwards;get
/*************************************/animation
[androidOutSecondAnimation setValue:@"zzpAndiordOutSecondFade" forKey:@"zzpFade"];
[_zzpAndiordAlertBG.layer addAnimation:androidOutSecondAnimation forKey:@"scaleFrist"];
2.動畫的代理方法 經過 key來區分 不一樣的 動畫
一.經過KVO方法的獲取原來的值 --- 經過比較值是否相等
** 建立動畫 並給關鍵字賦值
CATransition *ComeAnimation = [CATransition animation];
ComeAnimation.duration = 0.2f;
ComeAnimation.timingFunction = UIViewAnimationCurveEaseInOut;
ComeAnimation.fillMode = kCAFillModeForwards;
ComeAnimation.type = kCATransitionReveal;
ComeAnimation.subtype = kCATransitionFade;
ComeAnimation.delegate = self;
ComeAnimation.removedOnCompletion = YES;
//這個句話就是給 本身設置的關鍵字 賦值 這個key (也就是@"zzpFade" 位置的 字符串)所有 同樣 而Vlaue(也就是
@"zzpBGComeFade" 位置的 字符串) 這個值必須 所有 不同
[ComeAnimation setValue:@"zzpBGComeFade" forKey:@"zzpFade"];
[_BGView.layer addAnimation:ComeAnimation forKey:@"halfAlphaBG"];
** 在代理方法中經過如下方法 區分動畫 其中zzpBGComeFade 是在實例化動畫是 本身定義的值
NSString *TargetType = [anim valueForKey:@"zzpFade"];
if ([TargetType isEqualToString:@"zzpBGComeFade"]) {
if (flag) {
NSLog(@"相似於系統的警示框 come -- 動畫結束");
}
}
二.經過layer 上動畫的關鍵字 找到動畫而且和代理的回調的動畫進行比較
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
[animation setFromValue:@1.0];
[animation setToValue:@(1.7/2.5)];
[animation setDuration:0.5f];
animation.delegate = self;
animation.removedOnCompletion = NO;
animation.fillMode = kCAFillModeForwards;
**給動畫設置關鍵字
[_QRcodeImageSecond.layer addAnimation:animation forKey:@"SecondScale"];
** 區分動畫
if (anim == [_QRcodeImageFrist.layer animationForKey:@"FristScale"]) {
if (flag) {
_QRcodeImageFrist.userInteractionEnabled = YES;
_QRcodeImageSecond.hidden = NO;
_QRcodeImageFrist.hidden = YES;
[_QRcodeImageFrist.layer removeAllAnimations];
}
}