【发布时间】:2014-02-13 00:19:36
【问题描述】:
我有一个图像视图,它开始使用 clipsToBounds 裁剪它的图像,内容模式设置为“缩放方面填充”,我希望它将图像“放大”到整个图像。如果 clipsToBounds=NO 是一个动画属性,那正是我想要的,但它似乎不是。有没有办法让它动画化?
如果不是,另一种方法是调整视图的大小,使其与图像大小具有相同的宽高比,同时保持它不小于图像视图开始时的大小(即最小化高度或宽度,不减少到任何一个)。我不确定执行此操作的最佳方法,考虑到图像可能比图像视图大或小得多,并且图像的宽高比几乎可以是任何东西(但它通常是 iOS 设备的相机照片) .
更新 1:似乎 layer.masksToBounds 可以工作,文档说它是可动画的,但我的代码似乎不起作用:
CABasicAnimation *layerAnim = [CABasicAnimation animationWithKeyPath:@"masksToBounds"];
layerAnim.fromValue = @(YES);
layerAnim.toValue = @(NO);
layerAnim.removedOnCompletion = YES;
layerAnim.duration = 1.0;
[_imageView.layer addAnimation:layerAnim forKey:@"masksToBounds"];
我在运行这个图层动画的同时运行一个 UIView 块动画,它改变了图像视图的框架和变换,如果这很重要的话。
更新 2:我在 UIView 动画块中没有这个核心动画,根据文档,它应该是。我已将上面的代码移到动画块中,但它仍然没有动画(更改立即发生)。我开始认为“可动画化”只是意味着它可以放置在动画中,而不是它会随着时间的推移而积极地动画化。
【问题讨论】:
标签: ios objective-c uiimageview calayer caanimation