[UIView animateWithDuration:30.0f delay:0.0f options:UIViewAnimationOptionCurveEaseInOut animations:^{
v.contentMode = UIViewContentModeScaleAspectFit;
v.frame = v.superview.bounds;
} completion:^(BOOL finished) {
[v removeFromSuperview];
}];
我希望UIImageView调整大小并更改contentMode,但上面的代码不起作用。它在动画开始时立即更改了contentMode。
有没有办法给它制作动画?
答案 0 :(得分:8)
正如其他人所说,无法为contentMode制作动画。
这个库的存在是为了解决这个问题! https://github.com/patrickbdev/PBImageView
imageView.contentMode = .scaleAspectFit
UIView.animateWithDuration(1) {
self.imageView.contentMode = .scaleAspectFill
}
答案 1 :(得分:5)
基于“What Can Be Animated”,您无法直接为contentmode制作动画。但是,您可以尝试设置框架的动画,以获得与contentmode相同的行为。动画完成后,您可以将contentmode和frame设置回原始状态。
答案 2 :(得分:2)
要实现这一点,您可以在github上使用此组件:https://github.com/VivienCormier/UIImageViewModeScaleAspect
答案 3 :(得分:1)
UIImageView
从contentMode
继承其UIView
属性。它不是您可以设置动画的属性之一。有关详细信息,请参阅View Programming Guide。
答案 4 :(得分:0)
MishieMoo是对的。 contentMode不能动画。我认为你可以改变视图的界限来实现你想要的。
答案 5 :(得分:0)
是的,contentMode不能动画,但是" center"可以 - 在帧或边界动画不符合条件的情况下,将其用于contentMode动画模拟
答案 6 :(得分:0)
我认为你需要这个:https://github.com/vitoziv/VICMAImageView
您可以像使用UIImageView一样使用VICMAImageView,并在动画块中为contentMode设置动画:
[UIView animateWithDuration:0.3
animations:^{
imageView.contentMode = UIViewContentModeScaleAspectFill;
}];
答案 7 :(得分:0)
我认为自iOS 4.0起,您可以按照this post中所述使用UIView.transition(...)为过渡设置动画。在Swift 5中,它看起来像这样:
let contentMode: UIView.ContentMode = imageView.contentMode == .scaleAspectFit ? .scaleAspectFill : .scaleAspectFit
UIView.transition(with: imageView, duration: 0.5,
options: .transitionFlipFromBottom,
animations: {
self.imageView.contentMode = contentMode
},
completion: nil)