繁体   English   中英

如何移动UIView,但相对于Superview保持其内容位置不变?

[英]How can I move a UIView, but leave its content positions unchanged relative to the superview?

一个UIView有2个图像作为子视图,并且剪辑范围设置为yes。

我想在动画块中移动UIView,但是使子视图不能与父视图一起移动。 如果视图是向右移动50个点,则将看到更多的第二张图像,而看不到第一张图像。

我可以手动移动视图,并更新与新视图位置相对的子视图位置,但是我无法弄清楚如何在一个块中实现相同的目的。

我认为您遇到的限制与以下事实有关:UIView Animation块在后台使用Core Animation,而Core Animation设置了一个“表示”层的动画,该层是已安排动画的原始视图/层的副本上。 因此,在块的动画期间,表示层的位置会发生变化,但是模型视图的位置保持不变。

由于您提到可以手动更新视图位置(和相反方向的子视图位置)以获得所需的效果,因此请考虑在动画调度时间创建一个NSTimer,该时间每秒运行60次(以尝试捕获每个动画帧),只需查询表示层的当前位置(由动画本身+指定为动画参数的任何特殊计时功能设置),然后执行工作以更新基础模型以匹配该位置。

您应该能够通过以下方式查询动画层的位置:

yourUIView.layer.presentationLayer.frame.origin

然后,将完成块添加到动画中,使计时器无效。

在访问视图的layer属性之前,必须将

QuartzCore.framework

干杯,

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM