首页 文章

iOS动画clipToBounds,masksToBounds或类似物

提问于
浏览
0

我有一个图像视图,开始裁剪它的图像与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动画块中没有这个核心动画,根据文档,它应该是 . 我已将上面的代码移动到动画块中,但它仍然没有动画(立即发生更改) . 我开始认为“动画”只是意味着它可以放在动画中,而不是随着时间的推移它会主动动画 .

1 回答

  • 2

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

    您可以使用Core Animation和图层蒙版来实现 .

    这是你做的:

    将图像视图的clipsToBounds设置为FALSE,因此如果您允许,图像将完全显示 .

    创建一个与整个图像大小相同的CAShapeLayer . 创建一个矩形贝塞尔曲线路径,其大小与初始图像相同 . 安装bezier路径的CGPath作为形状图层的路径 .

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

    然后将形状图层安装为图像视图图层的蒙版 . 这将导致图像被剪裁为形状图层的形状 .

    现在,如果您将形状图层中安装的路径更改为图像的完整大小的矩形,系统将为您设置更改动画 .

相关问题