![](/img/trans.png)
[英]Why is my UIView.transition animation code not affecting the display?
[英]Why does an image transition affect my animation?
我在圖像視圖上運行不斷的動畫:
[UIView animateWithDuration:dur
delay:curAnim.delay
options:(params)
animations:^{
self.view.layer.opacity = curAnim.opacity;
self.view.center = curAnim.center;
CGAffineTransform tr = CGAffineTransformMakeRotation(curAnim.rotation);
tr = CGAffineTransformScale(tr, curAnim.scale, curAnim.scale);
self.view.transform = tr;
}
completion:^(BOOL finished){
}];
然后,當常量動畫正在運行時,我想轉換到另一個圖像:
-(void)transitionToImage:(UIImage*)image duration:(CGFloat)duration
{
UIImageView* iv = (UIImageView*)self.view;
iv.image = image;
CATransition *transition = [CATransition animation];
transition.duration = duration;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
transition.type = kCATransitionFade;
[iv.layer addAnimation:transition forKey:@"transition"];
}
但是,當我轉換時,現在有2個視圖,一個移動而一個不移動,而不是在我的圖像視圖上發生轉換。
我嘗試了各種轉換方法,但都產生了同樣的問題。
我怎么能這樣做,以便我可以轉換並繼續當前正在運行的動畫?
將Core Animation用於兩種動畫
CABasicAnimation *posAnimation = [CABasicAnimation animationWithKeyPath:@"position"];
posAnimation.toValue = [NSValue valueWithCGPoint:CGPointMake(250, 250)];
posAnimation.fromValue = [NSValue valueWithCGPoint:self.imageView.layer.position];
posAnimation.duration = 3;
posAnimation.fillMode = kCAFillModeForwards;
posAnimation.removedOnCompletion = NO;
[self.imageView.layer addAnimation:posAnimation forKey:nil];
CABasicAnimation *imgAnim = [CABasicAnimation animationWithKeyPath:@"contents"];
imgAnim.fromValue = (id)[UIImage imageNamed:@"icon1"].CGImage;
imgAnim.toValue = (id)[UIImage imageNamed:@"icon2"].CGImage;
imgAnim.duration = 3;
imgAnim.fillMode = kCAFillModeForwards;
imgAnim.removedOnCompletion = NO;
[self.imageView.layer addAnimation:imgAnim forKey:nil];
CoreAnimation(CATransition)並沒有真正改變屬性。 [UIView animateWithDuration:...]的確如此。 所以CATransition並不關心當前的位置。 它會在動畫開始的位置抓取您的圖像,並僅在始終位於相同位置的“presentationLayer”(不在圖層本身)上執行轉換。
更新:
CABasicAnimation *scaleAnim = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
scaleAnim.fromValue = @1;
scaleAnim.toValue = @2;
scaleAnim.duration = 3;
scaleAnim.fillMode = kCAFillModeForwards;
scaleAnim.removedOnCompletion = NO;
[self.imageView.layer addAnimation:scaleAnim forKey:nil];
CABasicAnimation *rotAnim = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
rotAnim.fromValue = @0;
rotAnim.toValue = @(M_PI);
rotAnim.duration = 3;
rotAnim.fillMode = kCAFillModeForwards;
rotAnim.removedOnCompletion = NO;
[self.imageView.layer addAnimation:rotAnim forKey:nil];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.