2014-02-13 22 views
0

我有一个图像视图,开始裁剪它的图像与clipsToBounds和内容模式设置为“缩放方面填充”,我希望它“放大”图像的整个图像。如果clipsToBounds = NO是一个动画属性,那正是我想要的,它似乎不是。有没有一种方法来动画?iOS的动画clipToBounds,masksToBounds,或类似

如果不是,另一种方法是调整视图的大小,使其与图像大小的宽高比​​相同,同时保持它不小于图像视图的起始位置(即最小增加到高度或宽度,没有减少到)。我不确定这样做的最佳方法,考虑到图像可能比图像视图大得多或者比图像视图小,图像的宽高比可能只是任何东西(但它通常是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动画块中的核心动画,根据文档,它应该是。我已经将上面的代码移动到了动画块中,但它仍然没有动画效果(即时更改)。我开始认为“动画”只是意味着它可以放置在一个动画中,而不是随着时间的推移它会主动地动画。

回答

2

所以你不希望你的图像增长,但你希望它首先被剪辑,然后外部像素被暴露?

你可以使用核心动画和图层蒙版来做到这一点。

这里就是你要做的:

设置图像视图的clipsToBounds为FALSE,所以如果你让它的图像将充分展示。

创建一个CAShapeLayer,它是整个图像的大小。创建一个矩形贝塞尔路径,它是初始图像的大小。安装贝塞尔路径的CGPath作为形状图层的路径。

形状图层的填充颜色设置为一个不透明的颜色

然后安装形状层图像视图的层的面具。这将导致图像被剪裁成形状图层的形状。

现在,如果将安装在形状图层中的路径更改为图像全尺寸的矩形,系统将为您制作动画变化。

+0

这种方法的棘手部分是创建CAShapeLayer整个图像的大小。我缩小了图像尺寸,所以我没有尺寸,如果它没有被裁剪。如果我这样做了,我可以使用clipsToBounds = YES来设置框架大小的变化。 – Siegfoult

+0

UIImage有一个size属性,它会告诉你图像的“本地”大小。除非您创建了缩放版本的图像,否则您应该可以检查图像的大小属性。 –