5
[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。

有没有办法让它动起来?

4

8 回答 8

10

正如其他人所提到的,没有办法为 contentMode 设置动画。

这个库的存在就是为了解决这个问题! https://github.com/patrickbdev/PBImageView

imageView.contentMode = .scaleAspectFit

UIView.animateWithDuration(1) {
    self.imageView.contentMode = .scaleAspectFill
}
于 2015-12-14T10:14:27.450 回答
5

基于“ What Can Be Animated ”,您不能直接为 contentmode 设置动画。但是,您可以尝试为框架设置动画,以获得与 contentmode 相同的行为。动画完成后,您可以将 contentmode 和 frame 设置回原始状态。

于 2013-04-03T02:29:56.787 回答
2

UIImageView从 继承其contentMode属性UIView。它不是您可以设置动画的属性之一。更多信息可以在View Programming Guide中找到。

于 2013-04-03T02:25:00.157 回答
2

为此,您可以在 github 上使用此组件:https ://github.com/VivienCormier/UIImageViewModeScaleAspect

于 2014-01-29T14:21:50.513 回答
1

是的 contentMode 不能动画,但“center”可以 - 在帧或边界动画不符合要求的情况下将其用于 contentMode 动画仿真

于 2014-04-21T13:49:37.090 回答
0

MishieMoo 是正确的。contentMode 不能动画。我认为你可以改变视图的边界来实现你想要的。

于 2013-04-03T02:33:14.963 回答
0

我认为你需要这个:https ://github.com/vitoziv/VICMAImageView

您可以像 UIImageView 一样使用 VICMAImageView,并在动画块中为 contentMode 设置动画:

[UIView animateWithDuration:0.3
                 animations:^{
                     imageView.contentMode = UIViewContentModeScaleAspectFill;
                 }];
于 2014-12-31T07:51:25.440 回答
0

我认为,从 iOS 4.0 开始,您可以使用 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)
于 2019-07-09T16:41:28.657 回答