Jos*_*ane 158 cocoa-touch objective-c uiimageview ios swift
而不是创建两个UIImageViews,简单地改变image一个视图似乎是合乎逻辑的.如果我这样做,那么两个图像之间是否有淡入淡出/交叉消解而不是即时切换?
alg*_*gal 575
使用新的基于块的UIKit动画方法可以更加简单.
假设以下代码在视图控制器中,并且您想要交叉解散的UIImageView是self.view的子视图,可通过self.imageView属性进行寻址.那你需要的只是:
UIImage * toImage = [UIImage imageNamed:@"myname.png"];
[UIView transitionWithView:self.imageView
duration:5.0f
options:UIViewAnimationOptionTransitionCrossDissolve
animations:^{
self.imageView.image = toImage;
} completion:nil];
Run Code Online (Sandbox Code Playgroud)
完成.
要在Swift中实现它,就像这样:
let toImage = UIImage(named:"myname.png")
UIView.transitionWithView(self.imageView,
duration:5,
options: UIViewAnimationOptions.TransitionCrossDissolve,
animations: { self.imageView.image = toImage },
completion: nil)
Run Code Online (Sandbox Code Playgroud)
Swift 3.0
let toImage = UIImage(named:"myname.png")
UIView.transition(with: self.imageView,
duration: 0.3,
options: .transitionCrossDissolve,
animations: {
self.imageView.image = toImage
},
completion: nil)
Run Code Online (Sandbox Code Playgroud)
Mir*_*les 45
编辑:下面的@algal有一个更好的解决方案.
另一种方法是使用预定义的CAAnimation过渡:
CATransition *transition = [CATransition animation];
transition.duration = 0.25;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
transition.type = kCATransitionFade;
transition.delegate = self;
[self.view.layer addAnimation:transition forKey:nil];
view1.hidden = YES;
view2.hidden = NO;
Run Code Online (Sandbox Code Playgroud)
请参阅Apple的View Transitions示例项目:https://developer.apple.com/library/content/samplecode/ViewTransitions/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007411
对于Swift 3.0.1:
UIView.transition(with: self.imageView,
duration:0.5,
options: .transitionCrossDissolve,
animations: { self.imageView.image = newImage },
completion: nil)
Run Code Online (Sandbox Code Playgroud)
参考:https://gist.github.com/licvido/bc22343cacfa3a8ccf88
是的,你说的是绝对正确的,这就是它的方法.我写了这个方法并总是使用它来淡入我的图像.我CALayer为此付出了代价.您需要为此导入Core Animation.
+ (void)fadeInLayer:(CALayer *)l
{
CABasicAnimation *fadeInAnimate = [CABasicAnimation animationWithKeyPath:@"opacity"];
fadeInAnimate.duration = 0.5;
fadeInAnimate.repeatCount = 1;
fadeInAnimate.autoreverses = NO;
fadeInAnimate.fromValue = [NSNumber numberWithFloat:0.0];
fadeInAnimate.toValue = [NSNumber numberWithFloat:1.0];
fadeInAnimate.removedOnCompletion = YES;
[l addAnimation:fadeInAnimate forKey:@"animateOpacity"];
return;
}
Run Code Online (Sandbox Code Playgroud)
你可以做相反的淡出图像.它淡出后.你只需从superview(即UIImageView)中删除它.[imageView removeFromSuperview].