cocoa-touch - UIVIew 动画 - 缩放 + 翻译

标签 cocoa-touch uikit uiview core-animation uiviewanimation

我有一个 View ,我想通过动画将其缩放并转换到新位置。我尝试使用以下代码实现它:

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:kDurationForFullScreenAnimation];
[[self animatingView] setFrame:finalRect];
[UIView commitAnimations];

这段代码的效果是, View 首先将其内容的大小更改为 finalRect,然后将其转换为新位置。即缩放部分从不动画。 View 只是转换为新的大小,然后被转换。

这个问题已经在其他几个线程中讨论过,但没有一个得出结论。不过,确实存在一种解决方案,即使用计时器并每次在计时器回调中设置帧,但它存在性能缺陷。

这个问题最合适的解决方案是什么,为什么在第一种情况下会出现这个问题?

谢谢

最佳答案

设置框架既不缩放也不平移。您要么使用了错误的术语,要么使用了错误的工具来完成这项工作。当您希望影响 UIView(而不是使用 Core Animation 转换的层)时,缩放和平移都使用 Core Graphics Affine 转换完成。

缩放 View 使用

// 2x
[rotationView setTransform:CGAffineTransformMakeScale(2.0, 2.0)];

要翻译,请使用
// Move origin by 100 on both axis
[rotationView setTransform:CGAffineTransformMakeTranslation(100.0, 100.0)];

要为这些设置动画,请将它们包装在一个动画块中。如果你想用这两个来转换 View ,那么你需要连接它们。

如果您根本不想要缩放和平移(变换),那么您的意思是您想要更改 View 的边界和位置。这些随着调用而改变
[view setBounds:newRect];
[view setCenter:newCenter];

其中 newRect 和 newCenter 分别是代表屏幕上新位置的 CGRect 和 CGPoint 。同样,这些需要包裹在动画块中。

关于cocoa-touch - UIVIew 动画 - 缩放 + 翻译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3509494/

相关文章:

ios - 限制在 ColorPicker UIView 上的触摸 - iOS

ios - 弹出 View Controller 时的通知

cocoa-touch - NSString 中的上标序号后缀

ios - 创建自定义 UITableView 分隔线

ios - 我在 View Controller 中显示了一个 UIView,如何检测用户何时在该 View 之外点击?

objective-c - 找不到类方法

objective-c - 设备锁定时 AVAudioPlayer 将无法播放

ios - 选中的单元格图像将显示在 UITableView 中

objective-c - 使用贝塞尔路径

ios - 水平间距相等的 UICollectionView,包括插图 - UICollectionViewFlowLayout?