作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想同时将 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.hideButton
和
self.zoomView
有相同的superview。
关于ios - 如何组合核心动画 CATransform3D 矩阵以动画同时平移和缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9036561/
我是一名优秀的程序员,十分优秀!