gpt4 book ai didi

iOS 动画 clipToBounds、masksToBounds 或类似的

转载 作者:行者123 更新时间:2023-11-28 22:15:47 25 4
gpt4 key购买 nike

我有一个 ImageView ,它开始使用 clipsToBounds 裁剪图像并将内容模式设置为“比例纵横比填充”,我希望它将图像“放大”到整个图像。如果 clipsToBounds=NO 是一个动画属性,那将正是我想要的,但它似乎不是。有没有办法让它动画化?

如果不是,另一种方法是调整 View 的大小,使其与图像大小的宽高比​​相同,同时保持它不小于 ImageView 开始时的大小(即高度或宽度的最小 increate,不减少到任一个)。我不确定这样做的最佳方法,考虑到图像可能比 ImageView 大得多或小得多,并且图像的宽高比几乎可以是任何东西(但通常是 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 block 动画,它正在改变 ImageView 的框架和变换,如果这很重要的话。

更新 2:我在 UIView 动画 block 中没有这个核心动画,根据文档,它应该是。我已将上面的代码移动到动画 block 中,但它仍然没有动画(变化立即发生)。我开始认为“可动画化”仅仅意味着它可以被放置在动画中,而不是它会随着时间的推移而活跃起来。

最佳答案

所以你不想让你的图像变大,而是希望它先被裁剪,然后暴露外面的像素?

您可以使用 Core Animation 和图层蒙版来做到这一点。

这是你要做的:

将 ImageView 的 clipsToBounds 设置为 FALSE,这样图像就会完全显示。

创建一个与整个图像大小相同的 CAShapeLayer。创建一个与初始图像大小相同的矩形贝塞尔曲线路径。将该贝塞尔曲线路径的 CGPath 安装为形状层的路径。

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

然后安装形状层作为 ImageView 层的 mask 。这将导致图像被裁剪为形状层的形状。

现在,如果您将安装在形状层中的路径更改为与图像完全相同的矩形,系统将为您制作更改动画。

关于iOS 动画 clipToBounds、masksToBounds 或类似的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21742826/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com