gpt4 book ai didi

ios - 如何组合核心动画 CATransform3D 矩阵以动画同时平移和缩放

转载 作者:行者123 更新时间:2023-12-01 17:34:29 45 4
gpt4 key购买 nike

我想同时将 CALayer 从一个 CGrect(一个小的,从一个按钮)缩放和转换为另一个(一个更大的,居中的,用于 View )。基本上,这个想法是用户触摸一个按钮,然后从按钮上,一个 CALayer 显示、翻译和放大,最终在屏幕上居中。然后 CALayer(通过另一个按钮)收缩回按钮的位置和大小。

我正在通过 CATransform3D 矩阵对此进行动画处理。但是 CALayer 实际上是 UIView 的支持层(因为我还需要 Responder 功能)。在分别应用我的比例或平移变换时,效果很好。两者的连接(平移,然后是缩放)会偏移图层的位置,因此在缩小时它不会与按钮对齐。

我的猜测是,这是因为 CALayer anchor 默认位于其中心。变换首先应用平移,移动“大”CALayer 使其与框架左上角的按钮对齐。然后,当缩放发生时,由于 CALayer anchor 位于中心,所有方向都朝它缩小。此时,我的图层是按钮的大小(我想要的),但位置是偏移的(导致所有点都向图层中心收缩)。

说得通?

所以我试图弄清楚是否需要连接翻译+比例,而不是:

翻译

将 anchor 更改为左上角。

规模。

或者,如果我应该能够想出一些因素或常数来合并到平移矩阵的值中,以便它转换为位置偏移量,随后的缩放将依次偏移量,然后最终位置将是对。

有什么想法吗?

最佳答案

你应该发布你的代码。当我们可以查看您的代码时,我们通常更容易为您提供帮助。

无论如何,这对我有用:

- (IBAction)showZoomView:(id)sender {
[UIView animateWithDuration:.5 animations:^{
self.zoomView.layer.transform = CATransform3DIdentity;
}];
}

- (IBAction)hideZoomView:(id)sender {
CGPoint buttonCenter = self.hideButton.center;
CGPoint zoomViewCenter = self.zoomView.center;
CATransform3D transform = CATransform3DIdentity;
transform = CATransform3DTranslate(transform, buttonCenter.x - zoomViewCenter.x, buttonCenter.y - zoomViewCenter.y, 0);
transform = CATransform3DScale(transform, .001, .001, 1);
[UIView animateWithDuration:.5 animations:^{
self.zoomView.layer.transform = transform;
}];
}

在我的测试用例中, self.hideButtonself.zoomView有相同的superview。

关于ios - 如何组合核心动画 CATransform3D 矩阵以动画同时平移和缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9036561/

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