Ios 无论如何,要设置UIImageView的动画';将contentMode从aspectFill设置为aspectFit?

Ios 无论如何,要设置UIImageView的动画';将contentMode从aspectFill设置为aspectFit?,ios,animation,uiimageview,Ios,Animation,Uiimageview,我想要一个UIImageView来调整和更改contentMode的大小,但是上面的代码不起作用。它在动画开始时立即更改了contentMode 有什么方法可以设置它的动画吗?UIImageView从UIView继承它的contentMode属性。它不是可以设置动画的属性之一。有关详细信息,请参见基于“”的。,您不能直接为contentmode设置动画。但是,您可以尝试设置帧的动画,以获得与contentmode相同的行为。动画完成后,可以将contentmode和frame设置回原始状态 Mi

我想要一个UIImageView来调整和更改contentMode的大小,但是上面的代码不起作用。它在动画开始时立即更改了contentMode


有什么方法可以设置它的动画吗?

UIImageView
UIView
继承它的
contentMode
属性。它不是可以设置动画的属性之一。有关详细信息,请参见基于“”的。

,您不能直接为contentmode设置动画。但是,您可以尝试设置帧的动画,以获得与contentmode相同的行为。动画完成后,可以将contentmode和frame设置回原始状态

MishieMoo是对的。contentMode无法设置动画。我认为你可以改变视图的边界来实现你想要的

要实现这一点,您可以在github上使用此组件:

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

我认为您需要:

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

[UIView animateWithDuration:30.0f delay:0.0f options:UIViewAnimationOptionCurveEaseInOut animations:^{
    v.contentMode = UIViewContentModeScaleAspectFit;
    v.frame = v.superview.bounds;
} completion:^(BOOL finished) {
    [v removeFromSuperview];
}];

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

这个库的存在就是为了解决这个问题!


我认为,自从iOS 4.0以来,您可以使用UIView.transition(…)设置过渡动画,如中所述。在Swift 5中,它如下所示:

imageView.contentMode = .scaleAspectFit

UIView.animateWithDuration(1) {
    self.imageView.contentMode = .scaleAspectFill
}

谢谢,我意识到使用uiimageview是无法做到的,所以我只想找到一种简单的方法:)那么,为帧设置动画可能是你最好的选择。我需要将其隐藏在视图下,并预先计算达到目标的位置:)这听起来像是另一个问题。我想我只能将imageview设置为子视图,然后计算位置和大小,然后制作动画谢谢!尼斯库:)在复杂的UIViewController动画转换中工作得非常出色。谢谢
imageView.contentMode = .scaleAspectFit

UIView.animateWithDuration(1) {
    self.imageView.contentMode = .scaleAspectFill
}
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)